[2026-09-16 20:12:20] [0.6.1] [INFO] auth.py:69: [AUTH] init_all_data 开始, mina_service=已创建, login_acount=ningjinyuan@126.com, config.account=ningjinyuan@126.com, config.password=***, auth.json存在=True, .mi.token存在=True, force_login=False [2026-09-16 20:12:20] [0.6.1] [INFO] auth.py:85: [AUTH] need_login=False, can_login=True [2026-09-16 20:12:20] [0.6.1] [INFO] auth.py:93: [AUTH] 无需登录 need_login:False can_login:True [2026-09-16 20:12:21] [0.6.1] [INFO] auth.py:361: [AUTH] 选中的设备: {'2181600216': Device(did='2181600216', device_id='02b2adf4-4fad-42ed-a30f-38072ff7b951', hardware='OH2P', name='Xiaomi 智能音箱 Pro', play_type=2, cur_music='', cur_playlist='全部', playlist2music={}), '726110455': Device(did='726110455', device_id='5e8b23d4-d770-4533-8f45-c5912841dc47', hardware='L05C', name='小爱音箱Play增强版', play_type=2, cur_music='', cur_playlist='全部', playlist2music={})} [2026-09-16 20:12:21] [0.6.1] [INFO] device_player.py:1256: in cancel_all_timer [2026-09-16 20:12:21] [0.6.1] [INFO] device_player.py:1256: in cancel_all_timer [2026-09-16 20:12:21] [0.6.1] [INFO] device_player.py:221: 彻底重新洗牌 全部,并将当前歌曲置顶 [2026-09-16 20:12:21] [0.6.1] [INFO] device_player.py:221: 彻底重新洗牌 全部,并将当前歌曲置顶 [2026-09-16 20:12:21] [0.6.1] [INFO] device_manager.py:63: 设备列表已更新: device_id_did={'02b2adf4-4fad-42ed-a30f-38072ff7b951': '2181600216', '5e8b23d4-d770-4533-8f45-c5912841dc47': '726110455'} [2026-09-16 20:12:21] [0.6.1] [INFO] device_manager.py:64: 设备分组已更新: groups={'Xiaomi 智能音箱 Pro': ['02b2adf4-4fad-42ed-a30f-38072ff7b951'], '小爱音箱Play增强版': ['5e8b23d4-d770-4533-8f45-c5912841dc47']} [2026-09-16 20:12:21] [0.6.1] [INFO] auth.py:414: [AUTH-get_cookie] .mi.token 文件加载成功 [2026-09-16 20:12:21] [0.6.1] [INFO] auth.py:100: [AUTH] cookie 已更新到 session [2026-09-16 20:12:21] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 20:12:21] [0.6.1] [INFO] device_player.py:221: 彻底重新洗牌 全部,并将当前歌曲置顶 [2026-09-16 20:12:21] [0.6.1] [INFO] device_player.py:221: 彻底重新洗牌 全部,并将当前歌曲置顶 [2026-09-16 20:12:21] [0.6.1] [INFO] xiaomusic.py:703: reinit success. data:Config(account='******', password='******', mi_did='2181600216,726110455', cookie='', verbose=False, music_path='music', temp_path='music/tmp', download_path='music/download', conf_path='conf', cache_dir='music/cache', cache_max_size_mb=500, cache_song_name='cache_songs', hostname='https://music.9996655.xyz', port=8090, public_port=443, proxy='', loudnorm='', search_prefix='bilisearch:', ffmpeg_location='./ffmpeg/bin', get_duration_type='ffprobe', active_cmd='play,set_play_type_rnd,playlocal,play_music_list,play_music_list_index,stop_after_minute,stop,play_next,play_prev,set_play_type_one,set_play_type_all,set_play_type_sin,set_play_type_seq,gen_music_list,add_to_favorites,del_from_favorites,cmd_del_music,online_play,singer_play,online_playlist_play', exclude_dirs='@eaDir,tmp', ignore_tag_dirs='', music_path_depth=10, disable_httpauth=True, httpauth_username='******', httpauth_password='******', music_list_url='', music_list_json='', custom_play_list_json='', disable_download=False, key_word_dict={'下一首': 'play_next', '上一首': 'play_prev', '单曲循环': 'set_play_type_one', '全部循环': 'set_play_type_all', '随机播放': 'set_play_type_rnd', '单曲播放': 'set_play_type_sin', '顺序播放': 'set_play_type_seq', '分钟后关机': 'stop_after_minute', '刷新列表': 'gen_music_list', '加入收藏': 'add_to_favorites', '收藏歌曲': 'add_to_favorites', '取消收藏': 'del_from_favorites', '播放列表第': 'play_music_list_index', '删除歌曲': 'cmd_del_music', '播放本地歌曲': 'playlocal', '本地播放歌曲': 'playlocal', '播放歌曲': 'play', '放歌曲': 'play', '在线播放': 'online_play', '搜索歌曲': 'online_play', '在线歌单': 'online_playlist_play', '搜索歌单': 'online_playlist_play', '播放歌手': 'singer_play', '搜索歌手': 'singer_play', '关机': 'stop', '暂停': 'stop', '停止': 'stop', '停止播放': 'stop', '关闭': 'stop', '退出': 'stop', '关掉音乐': 'stop', '播放列表': 'play_music_list', '播放歌单': 'play_music_list', '测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, key_match_order=['分钟后关机', '下一首', '上一首', '单曲循环', '全部循环', '随机播放', '单曲播放', '顺序播放', '关机', '刷新列表', '播放列表第', '播放列表', '加入收藏', '收藏歌曲', '取消收藏', '删除歌曲', '播放本地歌曲', '本地播放歌曲', '播放歌曲', '放歌曲', '在线播放', '搜索歌曲', '在线歌单', '搜索歌单', '播放歌手', '搜索歌手', '暂停', '停止', '停止播放', '关闭', '退出', '关掉音乐', '播放歌单', '测试自定义口令', '测试链接'], use_music_api=False, use_music_audio_id='436490277987655', use_music_id='355454500', log_file='xiaomusic.log.txt', fuzzy_match_cutoff=0.6, enable_fuzzy_match=True, fuzzy_match_max_results=100, enable_multi_result_selection=True, multi_result_action='random', stop_tts_msg='', enable_config_example=False, keywords_playlocal='播放本地歌曲,本地播放歌曲', keywords_play='播放歌曲,放歌曲', keywords_online_play='在线播放,搜索歌曲', keywords_online_playlist_play='在线歌单,搜索歌单', keywords_singer_play='播放歌手,搜索歌手', keywords_stop='关机,暂停,停止,停止播放,关闭,退出,关掉音乐', keywords_playlist='播放列表,播放歌单', user_key_word_dict={'测试自定义口令': 'exec#code1("hello")', '测试链接': 'exec#httpget("https://github.com/hanxi/xiaomusic")'}, enable_force_stop=False, devices={'2181600216': Device(did='2181600216', device_id='02b2adf4-4fad-42ed-a30f-38072ff7b951', hardware='OH2P', name='Xiaomi 智能音箱 Pro', play_type=2, cur_music='', cur_playlist='全部', playlist2music={}), '726110455': Device(did='726110455', device_id='5e8b23d4-d770-4533-8f45-c5912841dc47', hardware='L05C', name='小爱音箱Play增强版', play_type=2, cur_music='', cur_playlist='全部', playlist2music={})}, group_list='', remove_id3tag=False, convert_to_mp3=False, delay_sec=0, continue_play=True, enable_file_watch=False, file_watch_debounce=10, pull_ask_sec=1, enable_pull_ask=False, auto_convert=False, crontab_json='', enable_yt_dlp_cookies=False, enable_save_tag=False, enable_analytics=True, get_ask_by_mina=False, play_type_one_tts_msg='已经设置为单曲循环', play_type_all_tts_msg='已经设置为全部循环', play_type_rnd_tts_msg='已经设置为随机播放', play_type_sin_tts_msg='已经设置为单曲播放', play_type_seq_tts_msg='已经设置为顺序播放', search_prompt_audio='xiaomusic_ok.mp3', recently_added_playlist_len=50, enable_cmd_del_music=False, web_music_proxy=True, edge_tts_voice='zh-CN-XiaoyiNeural', enable_auto_clean_temp=True, qrcode_timeout=120) [2026-09-16 20:12:21] [0.6.1] [INFO] dependencies.py:277: disable_httpauth:True [2026-09-16 20:12:21] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 20:12:21] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 20:12:21] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 20:12:21] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 20:12:25] [0.6.1] [INFO] system.py:132: getsetting device_list: [{'deviceID': '02b2adf4-4fad-42ed-a30f-38072ff7b951', 'serialNumber': '62833/A5X147389', 'name': 'Xiaomi 智能音箱 Pro', 'alias': 'Xiaomi 智能音箱 Pro', 'current': False, 'presence': 'online', 'address': '60.255.127.33', 'miotDID': '2181600216', 'hardware': 'OH2P', 'romVersion': '1.62.2', 'romChannel': 'release', 'capabilities': {'multiroom_music': 1, 'multiroom_miplay': 1, 'content_blacklist': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'user_nick_name': 1, 'night_mode': 1, 'init_wakeup_and_dialogue': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'stereo_mode_v2': 1, 'report_times': 1, 'alarm_volume': 1, 'ai_instruction': 1, 'custom_tts': 1, 'classified_alarm': 1, 'continuous_desc_x10a': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'child_mode': 1, 'night_mode_detail': 1, 'voice_print_multidevice': 1, 'baby_schedule': 1, 'tone_setting': 1, 'earthquake': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'lamp_efficacy': 1, 'xiaomi_voip': 1, 'continuous_dialogue': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'yunduantts': 1, 'answer_tone': 1, 'stereo_mode': 1, 'mico_current': 1, 'soundfx_tuning': 1, 'voip_used_time': 1}, 'remoteCtrlType': '', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkF4VzZ0YzNsZWFBdmZKSW1tWDZSZlVHQktpNmdPQ1IrRk1sb0U4Q1pYTG1xR1pzUUVvRk4zZi9QNzloRE95WlByZkpSL2pmckVxMGZGNkpRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjIuMiIsInNpZ24iOiI3OWEyYTk5NjEwZTQ0MTJiZDYyMWYwOGMzODAzNTQzMjNlYWM5NWQxZjRlODQ4NzM5YTNjMDVlZjg1ZTZjNjFlIiwic24iOiI2MjgzMy9BNVgxNDczODkifQ==', 'deviceProfile': 'eyJzaWduIjoiMjFhNjVkNmY2OTAyYWYzMDkwOGU3NmE0YWI0MmRiMjdhOTUzMDNlMmY0MDI1OGQ1MWI3MjI2YjM2N2NjNjRjYiIsImRldmljZUlkIjoiMDJiMmFkZjQtNGZhZC00MmVkLWEzMGYtMzgwNzJmZjdiOTUxIn0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '50:FE:39:F4:2A:38', 'ssid': ''}, {'deviceID': '5e8b23d4-d770-4533-8f45-c5912841dc47', 'serialNumber': '31833/C2WW44286', 'name': '小爱音箱Play增强版', 'alias': '小爱音箱Play增强版', 'current': False, 'presence': 'online', 'address': 'unknown', 'miotDID': '726110455', 'hardware': 'L05C', 'romVersion': '1.68.2', 'romChannel': 'release', 'capabilities': {'content_blacklist': 1, 'lan_tv_control': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'night_mode': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'report_times': 1, 'ai_instruction': 1, 'classified_alarm': 1, 'loadmore_v2': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'night_mode_detail': 1, 'child_mode': 1, 'voice_print_multidevice': 1, 'tone_setting': 1, 'baby_schedule': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'mesh_conflict_check': 1, 'yueyu': 1, 'led_clock': 1, 'yunduantts': 1, 'mico_current': 1}, 'remoteCtrlType': 'miot', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkQvZVZEQXd3dWcxeEhxUURQbE1BZ1lHQkpHR01YYXZ5VklZcEd5eTBsUXViQUI1d0VvRkx6ZGE0Vy8vRDgzOThkM3pHVG5GRXpBeGNsMUpRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjguMiIsInNpZ24iOiIxMWNkY2Y3NGM4ZjY4MGYzZDJkZTk2YTU1YTMxZjU1MzRhZGUxYzVmZDk5M2Q3MTJkNTAyYmI4ZDIwZWFhYTBlIiwic24iOiIzMTgzMy9DMldXNDQyODYifQ==', 'deviceProfile': 'eyJzaWduIjoiOGEzYTNkZWMxYjAxNjRkNjk0NDQ0MWVjMTBlMmM2ZWQ0NTc0NGUxNDE1OTQxMjA4ZTdjYjRhZDljYTYzMTIzOCIsImRldmljZUlkIjoiNWU4YjIzZDQtZDc3MC00NTMzLThmNDUtYzU5MTI4NDFkYzQ3In0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '4C:C6:4C:E4:4B:B8', 'ssid': ''}] [2026-09-16 20:13:34] [0.6.1] [INFO] device_player.py:1142: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 3, "volume": 68, "loop_type": 2 }'}} [2026-09-16 20:13:34] [0.6.1] [INFO] device_player.py:1149: get_volume. volume:68 [2026-09-16 20:18:09] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:18:09] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:18:09] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:18:09] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 20:18:37] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:18:37] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:18:52] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:18:52] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:18:52] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:18:52] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 20:19:31] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:19:31] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:19:31] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:19:31] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 20:41:23] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:41:23] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:41:23] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:41:23] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 20:41:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Audiomack [2026-09-16 20:41:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Audiomack [2026-09-16 20:41:35] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌词网 [2026-09-16 20:41:35] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌词网 [2026-09-16 20:41:37] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:41:37] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:41:40] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌词千寻 [2026-09-16 20:41:40] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌词千寻 [2026-09-16 20:41:44] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Navidrome [2026-09-16 20:41:44] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Navidrome [2026-09-16 20:41:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: suno [2026-09-16 20:41:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for suno [2026-09-16 20:41:55] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: udio [2026-09-16 20:41:55] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for udio [2026-09-16 20:41:58] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 猫耳FM [2026-09-16 20:41:58] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 猫耳FM [2026-09-16 20:42:03] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 快手 [2026-09-16 20:42:03] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 快手 [2026-09-16 20:42:10] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 音悦台 [2026-09-16 20:42:10] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 音悦台 [2026-09-16 20:42:13] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Youtube [2026-09-16 20:42:13] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Youtube [2026-09-16 20:42:17] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: bilibili [2026-09-16 20:42:17] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for bilibili [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: WebDAV [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for WebDAV [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789562541565"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562541565: True [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:42:21] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789562541967"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562541967: True [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789562542268"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562542268: True [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789562542569"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562542569: True [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:42:22] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789562542870"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562542870: True [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789562543171"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562543171: True [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u97f3\u60a6\u53f0", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageNum = 20;\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d;\n return {\n id: item.id,\n title: item.title,\n artist: (item === null || item === void 0 ? void 0 : item.allArtistNames) ||\n ((_b = (_a = item.artists) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (s) => s.name).join(\", \")) ||\n ((_c = item.user) === null || _c === void 0 ? void 0 : _c.niceName),\n artwork: item === null || item === void 0 ? void 0 : item.headImg,\n urls: (_d = item === null || item === void 0 ? void 0 : item.fullClip) === null || _d === void 0 ? void 0 : _d.urls,\n };\n}\nfunction formatArtistItem(item) {\n return {\n id: item.id,\n name: item.name,\n avatar: item.headImg,\n };\n}\nlet lastQuery;\nlet lastMusicId;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n lastMusicId = 0;\n }\n lastQuery = query;\n let data = JSON.stringify({\n searchType: \"MV\",\n key: query,\n sinceId: lastMusicId,\n size: pageNum,\n requestTagRows: [\n {\n key: \"sortType\",\n chosenTags: [\"HOTTEST\"],\n },\n {\n key: \"source\",\n chosenTags: [\"-1\"],\n },\n {\n key: \"duration\",\n chosenTags: [\"-1\"],\n },\n ],\n });\n let config = {\n method: \"post\",\n maxBodyLength: Infinity,\n url: \"https://search-api.yinyuetai.com/search/get_search_result.json\",\n headers: {\n referrer: \"https://www.yinyuetai.com/\",\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n wua: \"YYT/1.0.0 (WEB;web;11;zh-CN;kADiV2jNJFy2ryvuyB5Ne)\",\n },\n data: data,\n };\n const response = (await axios_1.default.request(config)).data.data;\n lastMusicId = response[response.length - 1].id;\n return {\n isEnd: pageNum > response.length,\n data: response.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n let url;\n if (quality === \"standard\") {\n url = musicItem.urls.find((it) => it.streamType === 5).url;\n }\n else if (quality === \"high\") {\n url = musicItem.urls.find((it) => it.streamType === 1).url;\n }\n return {\n url,\n };\n}\nmodule.exports = {\n platform: \"\u97f3\u60a6\u53f0\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/yinyuetai/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789562543474"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 音悦台, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562543474: True [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 音悦台 [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:42:23] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:23] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 20:42:23] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 20:42:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDAV", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst webdav_1 = require(\"webdav\");\nlet cachedData = {};\nfunction getClient() {\n var _a, _b, _c;\n const { url, username, password, searchPath } = (_b = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables) === null || _a === void 0 ? void 0 : _a.call(env)) !== null && _b !== void 0 ? _b : {};\n if (!(url && username && password)) {\n return null;\n }\n if (!(cachedData.url === url &&\n cachedData.username === username &&\n cachedData.password === password &&\n cachedData.searchPath === searchPath)) {\n cachedData.url = url;\n cachedData.username = username;\n cachedData.password = password;\n cachedData.searchPath = searchPath;\n cachedData.searchPathList = (_c = searchPath === null || searchPath === void 0 ? void 0 : searchPath.split) === null || _c === void 0 ? void 0 : _c.call(searchPath, \",\");\n cachedData.cacheFileList = null;\n }\n return (0, webdav_1.createClient)(url, {\n authType: webdav_1.AuthType.Password,\n username,\n password,\n });\n}\nasync function searchMusic(query) {\n var _a, _b;\n const client = getClient();\n if (!cachedData.cacheFileList) {\n const searchPathList = ((_a = cachedData.searchPathList) === null || _a === void 0 ? void 0 : _a.length)\n ? cachedData.searchPathList\n : [\"/\"];\n let result = [];\n for (let search of searchPathList) {\n try {\n const fileItems = (await client.getDirectoryContents(search)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n result = [...result, ...fileItems];\n }\n catch (_c) { }\n }\n cachedData.cacheFileList = result;\n }\n return {\n isEnd: true,\n data: ((_b = cachedData.cacheFileList) !== null && _b !== void 0 ? _b : [])\n .filter((it) => it.basename.includes(query))\n .map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nasync function getTopLists() {\n getClient();\n const data = {\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: (cachedData.searchPathList || []).map((it) => ({\n title: it,\n id: it,\n })),\n };\n return [data];\n}\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n const fileItems = (await client.getDirectoryContents(topListItem.id)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n return {\n musicList: fileItems.map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"\u732b\u5934\u732b\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\",\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n },\n ],\n version: \"0.0.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/webdav/index.js\",\n cacheControl: \"no-cache\",\n search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n },\n getTopLists,\n getTopListDetail,\n getMediaSource(musicItem) {\n const client = getClient();\n return {\n url: client.getFileDownloadLink(musicItem.id),\n };\n },\n};", "id": "msg_1789562544798"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDAV, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562544798: False [2026-09-16 20:42:25] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "bilibili", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require(\"cheerio\");\nconst UA = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\";\nconst headers = {\n \"user-agent\": UA,\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie = null;\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: { \"User-Agent\": UA },\n })).data.data;\n }\n return cookie;\n}\nfunction getCookieString() {\n if (!cookie)\n return \"\";\n return `buvid3=${cookie.b_3};buvid4=${cookie.b_4}`;\n}\nasync function getCid(bvid, aid) {\n const params = bvid ? { bvid } : { aid };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view\", {\n headers,\n params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n const dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": UA,\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page,\n order: \"\",\n page_size: pageSize,\n keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: getCookieString() }),\n params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": UA,\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": UA,\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: getCookieString() }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b, _c, _d, _e, _f;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n const len = audios.length;\n switch (quality) {\n case \"low\":\n url = (_a = audios[0]) === null || _a === void 0 ? void 0 : _a.baseUrl;\n break;\n case \"standard\":\n url = (_b = audios[Math.min(1, len - 1)]) === null || _b === void 0 ? void 0 : _b.baseUrl;\n break;\n case \"high\":\n url = (_c = audios[Math.min(2, len - 1)]) === null || _c === void 0 ? void 0 : _c.baseUrl;\n break;\n case \"super\":\n url = (_d = audios[len - 1]) === null || _d === void 0 ? void 0 : _d.baseUrl;\n break;\n }\n if (!url) {\n url = (_e = audios[len - 1]) === null || _e === void 0 ? void 0 : _e.baseUrl;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_f = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _f !== void 0 ? _f : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n await getCookie();\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: Object.assign(Object.assign({}, headers), { cookie: getCookieString() }),\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n await getCookie();\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\", cookie: getCookieString() }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: (((_a = res.data.data) === null || _a === void 0 ? void 0 : _a.list) || []).map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"bilibili\",\n appVersion: \">=0.0\",\n version: \"0.3.0\",\n author: \"\u732b\u5934\u732b\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/bilibili/index.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789562545203"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 20:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: bilibili, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562545203: True [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: bilibili [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u7f51", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://zh.followlyrics.com/search', {\n params: {\n name: query,\n type: 'song'\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.table.table-striped > tbody');\n const items = results.children('tr');\n const data = items.map((index, el) => {\n const tds = $(el).children();\n const title = $(tds.get(0)).text().trim();\n const artist = $(tds.get(1)).text().trim();\n const album = $(tds.get(2)).text().trim();\n const id = $(tds.get(3)).children('a').attr('href');\n return {\n title,\n artist,\n album,\n id\n };\n }).toArray();\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('div#lyrics').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u7f51\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789562545505"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词网, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562545505: True [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词网 [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Navidrome", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst pageSize = 25;\nasync function httpGet(urlPath, params) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n console.log(userVariables);\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const preParams = {\n u: username,\n s: salt,\n t: CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex),\n c: \"MusicFree\",\n v: \"1.14.1\",\n f: \"json\",\n };\n return (await axios_1.default.get(`${url}/rest/${urlPath}`, {\n params: Object.assign(Object.assign({}, preParams), params),\n })).data;\n}\nfunction formatMusicItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatAlbumItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatArtistItem(it) {\n return Object.assign(Object.assign({}, it), { avatar: it.artistImageUrl });\n}\nasync function searchMusic(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function searchAlbum(query, page) {\n const data = await httpGet('search2', {\n query,\n albumCount: pageSize,\n albumOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.album;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatAlbumItem)\n };\n}\nasync function searchArtist(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function getAlbumInfo(albumItem) {\n const data = await httpGet('getAlbum', {\n id: albumItem.id\n });\n return {\n isEnd: true,\n data: data['subsonic-response'].album.song.map(formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"Navidrome\",\n version: \"0.0.0\",\n author: '\u732b\u5934\u732b',\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/navidrome/index.js\",\n cacheControl: \"no-cache\",\n userVariables: [\n {\n key: \"url\",\n name: \"\u670d\u52a1\u5668\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n },\n ],\n supportedSearchType: [\"music\", \"album\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n async getMediaSource(musicItem) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const urlObj = new URL(`${url}/rest/stream`);\n urlObj.searchParams.append('u', username);\n urlObj.searchParams.append('s', salt);\n urlObj.searchParams.append('t', CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex));\n urlObj.searchParams.append('c', 'MusicFree');\n urlObj.searchParams.append('v', '1.14.1');\n urlObj.searchParams.append('f', 'json');\n urlObj.searchParams.append('id', musicItem.id);\n return {\n url: urlObj.toString()\n };\n }\n};", "id": "msg_1789562545806"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Navidrome, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562545806: True [2026-09-16 20:42:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Navidrome [2026-09-16 20:42:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:42:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Youtube", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: item.videoId,\n title: (_b = (_a = item.title.runs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text,\n artist: (_d = (_c = item.ownerText.runs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text,\n artwork: (_g = (_f = (_e = item === null || item === void 0 ? void 0 : item.thumbnail) === null || _e === void 0 ? void 0 : _e.thumbnails) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.url,\n };\n}\nlet lastQuery;\nlet musicContinToken;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n musicContinToken = undefined;\n }\n lastQuery = query;\n let data = JSON.stringify({\n context: {\n client: {\n hl: \"zh-CN\",\n gl: \"US\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0,gzip(gfe)\",\n clientName: \"WEB\",\n clientVersion: \"2.20231121.08.00\",\n osName: \"Windows\",\n osVersion: \"10.0\",\n platform: \"DESKTOP\",\n userInterfaceTheme: \"USER_INTERFACE_THEME_LIGHT\",\n browserName: \"Edge Chromium\",\n browserVersion: \"119.0.0.0\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n screenWidthPoints: 1358,\n screenHeightPoints: 1012,\n screenPixelDensity: 1,\n screenDensityFloat: 1.2395833730697632,\n utcOffsetMinutes: 480,\n memoryTotalKbytes: \"8000000\",\n mainAppWebInfo: {\n pwaInstallabilityStatus: \"PWA_INSTALLABILITY_STATUS_UNKNOWN\",\n webDisplayMode: \"WEB_DISPLAY_MODE_BROWSER\",\n isWebNativeShareAvailable: true,\n },\n timeZone: \"Asia/Shanghai\",\n },\n user: {\n lockedSafetyMode: false,\n },\n request: {\n useSsl: true,\n internalExperimentFlags: [],\n },\n },\n query: musicContinToken ? undefined : query,\n continuation: musicContinToken || undefined,\n });\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/search?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n data: data,\n };\n const response = (await (0, axios_1.default)(config)).data;\n const contents = response.contents.twoColumnSearchResultsRenderer.primaryContents\n .sectionListRenderer.contents;\n const isEndItem = contents.find((it) => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = it.continuationItemRenderer) === null || _a === void 0 ? void 0 : _a.continuationEndpoint) === null || _b === void 0 ? void 0 : _b.continuationCommand) === null || _c === void 0 ? void 0 : _c.request) === \"CONTINUATION_REQUEST_TYPE_SEARCH\";\n });\n if (isEndItem) {\n musicContinToken =\n isEndItem.continuationItemRenderer.continuationEndpoint\n .continuationCommand.token;\n }\n const musicData = contents.find((it) => it.itemSectionRenderer)\n .itemSectionRenderer.contents;\n let resultMusicData = [];\n for (let i = 0; i < musicData.length; ++i) {\n if (musicData[i].videoRenderer) {\n resultMusicData.push(formatMusicItem(musicData[i].videoRenderer));\n }\n }\n return {\n isEnd: !isEndItem,\n data: resultMusicData,\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nlet cacheMediaSource = {\n id: null,\n urls: {},\n};\nfunction getQuality(label) {\n if (label === \"small\") {\n return \"standard\";\n }\n else if (label === \"tiny\") {\n return \"low\";\n }\n else if (label === \"medium\") {\n return \"high\";\n }\n else if (label === \"large\") {\n return \"super\";\n }\n else {\n return \"standard\";\n }\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b;\n if (musicItem.id === cacheMediaSource.id) {\n return {\n url: cacheMediaSource.urls[quality],\n };\n }\n cacheMediaSource = {\n id: null,\n urls: {},\n };\n const data = {\n context: {\n client: {\n screenWidthPoints: 689,\n screenHeightPoints: 963,\n screenPixelDensity: 1,\n utcOffsetMinutes: 120,\n hl: \"en\",\n gl: \"GB\",\n remoteHost: \"1.1.1.1\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"com.google.android.apps.youtube.music/6.14.50 (Linux; U; Android 13; GB) gzip\",\n clientName: \"ANDROID_MUSIC\",\n clientVersion: \"6.14.50\",\n osName: \"Android\",\n osVersion: \"13\",\n originalUrl: \"https://www.youtube.com/tv?is_account_switch=1&hrld=1&fltor=1\",\n theme: \"CLASSIC\",\n platform: \"MOBILE\",\n clientFormFactor: \"UNKNOWN_FORM_FACTOR\",\n webpSupport: false,\n timeZone: \"Europe/Amsterdam\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\",\n },\n user: { enableSafetyMode: false },\n request: {\n internalExperimentFlags: [],\n consistencyTokenJars: [],\n },\n },\n contentCheckOk: true,\n racyCheckOk: true,\n video_id: musicItem.id,\n };\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/player?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n data: JSON.stringify(data),\n };\n const result = (await (0, axios_1.default)(config)).data;\n const formats = (_a = result.streamingData.formats) !== null && _a !== void 0 ? _a : [];\n const adaptiveFormats = (_b = result.streamingData.adaptiveFormats) !== null && _b !== void 0 ? _b : [];\n [...formats, ...adaptiveFormats].forEach((it) => {\n const q = getQuality(it.quality);\n if (q && it.url && !cacheMediaSource.urls[q]) {\n cacheMediaSource.urls[q] = it.url;\n }\n });\n return {\n url: cacheMediaSource.urls[quality],\n };\n}\nmodule.exports = {\n platform: \"Youtube\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/youtube/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789562546107"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Youtube, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562546107: True [2026-09-16 20:42:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Youtube [2026-09-16 20:42:26] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'status': 'loaded', 'load_time': 1789562541.9668367, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789562542.2680752, 'enabled': True}, 'udio': {'status': 'loaded', 'load_time': 1789562542.569346, 'enabled': True}, '快手': {'status': 'loaded', 'load_time': 1789562542.8704784, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789562543.1715395, 'enabled': True}, 'suno': {'status': 'loaded', 'load_time': 1789562543.4726365, 'enabled': True}, '音悦台': {'status': 'loaded', 'load_time': 1789562543.775601, 'enabled': True}, 'bilibili': {'status': 'loaded', 'load_time': 1789562545.504726, 'enabled': True}, '歌词网': {'status': 'loaded', 'load_time': 1789562545.8057857, 'enabled': True}, 'Navidrome': {'status': 'loaded', 'load_time': 1789562546.1068304, 'enabled': True}, 'Youtube': {'status': 'loaded', 'load_time': 1789562546.4078453, 'enabled': True}} [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789562554312"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562554312: True [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789562554613"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562554613: True [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:42:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789562554914"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562554914: True [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789562555215"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562555215: True [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789562555516"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562555516: True [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:42:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:42:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789562555817"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562555817: True [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:42:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:42:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:42:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:42:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:42:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:42:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:42:36] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'status': 'loaded', 'load_time': 1789562554.61292, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789562554.9141283, 'enabled': True}, 'udio': {'status': 'loaded', 'load_time': 1789562555.2152636, 'enabled': True}, '快手': {'status': 'loaded', 'load_time': 1789562555.5163512, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789562555.817547, 'enabled': True}, 'suno': {'status': 'loaded', 'load_time': 1789562556.1186259, 'enabled': True}} [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.emit (node:events:520:35) [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 20:42:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async getTopListDetail (evalmachine.:58:21) { [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_RESPONSE', [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 20:42:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 20:42:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61', [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://studio-api.suno.ai/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 20:42:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 20:42:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 20:42:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: true, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0 HTTP/1.1\r\n' + [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 20:42:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\r\n' + [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'host: studio-api.suno.ai\r\n' + [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _keepAliveTimeout: 0, [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onPendingData: [Function: nop], [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: Agent { [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 20:42:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function (anonymous)], [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: maybeEnableKeylog] [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype] { [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 20:42:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] {}, [2026-09-16 20:42:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype] { [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': [ [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: TLSSocket { [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: [Object], [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 20:42:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 20:42:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'studio-api.suno.ai', [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: [ReadableState], [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: [WritableState], [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 20:42:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: [TLSWrap], [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [Array], [2026-09-16 20:42:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): [TLSWrap], [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): [TLSWrap], [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): [Timeout], [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 20:42:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 1, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): [Object], [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.socketListener): true, [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.currentReq): [Writable] [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: } [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveMsecs: 1000, [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxSockets: Infinity, [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxFreeSockets: 256, [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 20:42:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxTotalSockets: Infinity, [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: totalSocketCount: 1, [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentKeepAliveTimeoutBuffer: 1000, [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxCachedSessions: 100, [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sessionCache: { [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: map: { [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': Buffer(1257) [Uint8Array] [ [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 48, 130, 4, 229, 2, 1, 1, 2, 2, 3, 4, 4, [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 2, 19, 2, 4, 32, 166, 227, 27, 75, 136, 206, 45, [2026-09-16 20:42:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 14, 36, 67, 237, 121, 255, 235, 98, 191, 148, 100, 55, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 148, 39, 74, 110, 8, 229, 79, 218, 75, 2, 8, 39, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 182, 4, 48, 211, 162, 183, 153, 59, 174, 222, 70, 136, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 112, 155, 225, 185, 218, 73, 8, 56, 96, 209, 22, 14, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 107, 77, 169, 22, 59, 154, 53, 191, 181, 140, 66, 183, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 254, 21, 172, 186, 113, 32, 248, 62, 181, 3, 238, 84, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 208, 69, 113, 161, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ... 1157 more items [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: list: [ 'studio-api.suno.ai:443:::::::::::::::::::::' ] [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): false, [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socketPath: undefined, [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxHeaderSize: undefined, [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: insecureHTTPParser: false, [2026-09-16 20:42:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: '/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin Audiomack [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:42:58] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _ended: true, [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: res: IncomingMessage { [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: { [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:42:58] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:42:58] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: undefined, [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function: handleStreamError], [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: [Function: handleStreamData], [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [ [Function: responseOnEnd], [Function: handleStreamEnd] ], [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: readable: undefined, [2026-09-16 20:42:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function: handlerStreamAborted] [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: buffer: [], [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferIndex: 0, [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipes: [], [2026-09-16 20:42:59] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Audiomack already exists, will overwrite [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: awaitDrainWriters: null, [2026-09-16 20:42:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 194779004 [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: null, [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: httpVersionMajor: 1, [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: httpVersionMinor: 1, [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: httpVersion: '1.1', [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: complete: true, [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rawHeaders: [ [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Date', [2026-09-16 20:43:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Wed, 16 Sep 2026 12:42:36 GMT', [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type', [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'text/html; charset=utf-8', [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Length', [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '256', [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 歌词网 [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:01] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:01] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection', [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'keep-alive', [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:01] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:01] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:01] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'x-render-routing', [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'suspend-by-user', [2026-09-16 20:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'cf-cache-status', [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'DYNAMIC', [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Server', [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'cloudflare', [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'CF-RAY', [2026-09-16 20:43:02] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Audiomack [2026-09-16 20:43:02] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Audiomack [2026-09-16 20:43:02] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 歌词网 already exists, will overwrite [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'a3bff3b63e7eff1c-KIX', [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'alt-svc', [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'h3=":443"; ma=86400' [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rawTrailers: [], [2026-09-16 20:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: false, [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: upgrade: false, [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: '', [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: null, [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: statusCode: 503, [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: statusMessage: 'Service Unavailable', [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: client: TLSSocket { [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: { [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 歌词千寻 [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:03] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: undefined, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipe: false, [2026-09-16 20:43:04] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:04] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:04] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:04] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isServer: false, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requestCert: true, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rejectUnauthorized: true, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: session: undefined, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ALPNProtocols: undefined, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requestOCSP: undefined, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: enableTrace: undefined, [2026-09-16 20:43:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pskCallback: undefined, [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: undefined, [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onread: undefined, [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: signal: undefined [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 20:43:05] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌词网 [2026-09-16 20:43:05] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌词网 [2026-09-16 20:43:05] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 歌词千寻 already exists, will overwrite [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 20:43:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin Navidrome [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:06] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: [ [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onSocketCloseDestroySSL], [2026-09-16 20:43:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function], [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onClose] [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [Function: onReadableStreamEnd], [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [ [Function: handleSocketError], [Function] ], [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: keylogNewListener], [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: undefined, [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secure: [Function: onConnectSecure], [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: session: [Function (anonymous)], [2026-09-16 20:43:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function: onFree], [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [ [Function: onTimeout], [Function (anonymous)] ], [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentRemove: [Function: onRemove], [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined, [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: drain: undefined [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin suno [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:08] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'studio-api.suno.ai', [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 20:43:09] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌词千寻 [2026-09-16 20:43:09] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌词千寻 [2026-09-16 20:43:09] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Navidrome already exists, will overwrite [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: buffer: [], [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferIndex: 0, [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipes: [], [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: awaitDrainWriters: null, [2026-09-16 20:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 60303620 [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: WritableState { [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: corked: 0, [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onwrite: [Function: bound onwrite], [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writelen: 0, [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin udio [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferedIndex: 0, [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pendingcb: 0, [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:10] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 17563908, [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferedValue): null, [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kWriteCbValue): null [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 20:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: TLSWrap { [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: TCP { [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: [Getter/Setter], [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onconnection: null, [2026-09-16 20:43:12] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Navidrome [2026-09-16 20:43:12] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Navidrome [2026-09-16 20:43:12] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin suno already exists, will overwrite [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parentWrap: null, [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: true, [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onkeylog: [Function: onkeylog], [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakestart: [Function: noop], [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakedone: [Function (anonymous)], [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onocspresponse: [Function: onocspresponse], [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onnewsession: [Function: onnewsessionclient], [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onerror: [Function: onerror], [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [ '216.24.57.7:443' ], [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): TLSWrap { [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: TCP { [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: [Getter/Setter], [2026-09-16 20:43:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onconnection: null, [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 猫耳FM [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parentWrap: null, [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: true, [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onkeylog: [Function: onkeylog], [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakestart: [Function: noop], [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakedone: [Function (anonymous)], [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: suno [2026-09-16 20:43:15] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for suno [2026-09-16 20:43:15] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin udio already exists, will overwrite [2026-09-16 20:43:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onocspresponse: [Function: onocspresponse], [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onnewsession: [Function: onnewsessionclient], [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onerror: [Function: onerror], [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): TLSWrap { [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: TCP { [2026-09-16 20:43:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: [Getter/Setter], [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onconnection: null, [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parentWrap: null, [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: true, [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onkeylog: [Function: onkeylog], [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 快手 [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakestart: [Function: noop], [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:17] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakedone: [Function (anonymous)], [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onocspresponse: [Function: onocspresponse], [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onnewsession: [Function: onnewsessionclient], [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onerror: [Function: onerror], [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: udio [2026-09-16 20:43:18] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for udio [2026-09-16 20:43:18] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 猫耳FM already exists, will overwrite [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): Timeout { [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleTimeout: 5000, [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idlePrev: TimersList { [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleNext: [Circular *2], [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idlePrev: [Circular *2], [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: expiry: 17045, [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: id: -9007199254740991, [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: msecs: 5000, [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: priorityQueuePosition: 1 [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleNext: TimersList { [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleNext: [Circular *2], [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 音悦台 [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:19] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idlePrev: [Circular *2], [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: expiry: 17045, [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: id: -9007199254740991, [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: msecs: 5000, [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: priorityQueuePosition: 1 [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleStart: 12258, [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onTimeout: [Function: bound ], [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _timerArgs: undefined, [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 猫耳FM [2026-09-16 20:43:20] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 猫耳FM [2026-09-16 20:43:20] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 快手 already exists, will overwrite [2026-09-16 20:43:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _repeat: null, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _destroyed: false, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(refed): false, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHasPrimitive): false, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(asyncId): 53, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(triggerId): 51, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kAsyncContextFrame): undefined [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 20:43:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 1, [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin Youtube [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): { [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rejectUnauthorized: true, [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:43:22] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:22] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:43:22] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ciphers: 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA', [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: checkServerIdentity: [Function: checkServerIdentity], [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: minDHSize: 1024, [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRedirects: 21, [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: Infinity, [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null, [2026-09-16 20:43:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 20:43:23] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 20:43:23] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 快手 [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 快手 [2026-09-16 20:43:25] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 音悦台 already exists, will overwrite [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin bilibili [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:43:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789562605568"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562605568: True [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:43:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789562605970"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562605970: True [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:43:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789562606271"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562606271: True [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:43:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789562606572"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562606572: True [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:43:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789562606873"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562606873: True [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789562607174"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562607174: True [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'status': 'loaded', 'load_time': 1789562605.9699945, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789562606.2713308, 'enabled': True}, 'udio': {'status': 'loaded', 'load_time': 1789562606.5724037, 'enabled': True}, '快手': {'status': 'loaded', 'load_time': 1789562606.8734837, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789562607.1745121, 'enabled': True}, 'suno': {'status': 'loaded', 'load_time': 1789562607.4755547, 'enabled': True}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:43:27] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:43:27] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 20:43:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.emit (node:events:520:35) [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async getTopListDetail (evalmachine.:58:21) { [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_RESPONSE', [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 音悦台 [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 音悦台 [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Youtube already exists, will overwrite [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin WebDAV [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:43:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:43:29] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 20:43:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:43:30] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:43:30] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 20:43:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61', [2026-09-16 20:43:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://studio-api.suno.ai/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 20:43:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 20:43:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: true, [2026-09-16 20:43:34] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Youtube [2026-09-16 20:43:34] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Youtube [2026-09-16 20:43:34] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin bilibili already exists, will overwrite [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 20:43:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 20:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0 HTTP/1.1\r\n' + [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\r\n' + [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'host: studio-api.suno.ai\r\n' + [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 20:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _keepAliveTimeout: 0, [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onPendingData: [Function: nop], [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: Agent { [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function (anonymous)], [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: maybeEnableKeylog] [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype] { [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 20:43:38] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: bilibili [2026-09-16 20:43:38] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for bilibili [2026-09-16 20:43:38] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin WebDAV already exists, will overwrite [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] {}, [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype] { [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': [ [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: TLSSocket { [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: [Object], [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 20:43:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 20:43:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: WebDAV [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for WebDAV [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:43:41] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 20:43:41] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'studio-api.suno.ai', [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: [ReadableState], [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: [WritableState], [2026-09-16 20:43:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 20:43:42] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:43:42] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 bilibili 搜索失败: Plugin bilibili not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Plugin 快手 not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Plugin 猫耳FM not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Plugin udio not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Plugin suno not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Plugin Navidrome not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Plugin 歌词千寻 not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Plugin 歌词网 not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Plugin Audiomack not found or not loaded [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: [TLSWrap], [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 20:43:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [Array], [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): [TLSWrap], [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 20:43:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): [TLSWrap], [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): [Timeout], [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 20:43:44] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:43:44] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 bilibili 搜索失败: Plugin bilibili not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Plugin 快手 not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Plugin 猫耳FM not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Plugin udio not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Plugin suno not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Plugin Navidrome not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Plugin 歌词千寻 not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Plugin 歌词网 not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Plugin Audiomack not found or not loaded [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 20:43:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 1, [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): [Object], [2026-09-16 20:43:45] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:43:45] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 bilibili 搜索失败: Plugin bilibili not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Plugin 快手 not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Plugin 猫耳FM not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Plugin udio not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Plugin suno not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Plugin Navidrome not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Plugin 歌词千寻 not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Plugin 歌词网 not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Plugin Audiomack not found or not loaded [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.socketListener): true, [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.currentReq): [Writable] [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: } [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveMsecs: 1000, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxSockets: Infinity, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxFreeSockets: 256, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxTotalSockets: Infinity, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: totalSocketCount: 1, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentKeepAliveTimeoutBuffer: 1000, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxCachedSessions: 100, [2026-09-16 20:43:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sessionCache: { [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: map: { [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': Buffer(1257) [Uint8Array] [ [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 48, 130, 4, 229, 2, 1, 1, 2, 2, 3, 4, 4, [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 2, 19, 2, 4, 32, 242, 54, 1, 10, 127, 177, 120, [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 21, 213, 200, 24, 209, 94, 145, 76, 25, 214, 168, 41, [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 88, 53, 197, 110, 92, 239, 93, 62, 124, 138, 81, 200, [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 67, 4, 48, 9, 185, 24, 223, 154, 35, 14, 81, 99, [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 179, 68, 84, 77, 28, 120, 48, 227, 51, 91, 224, 186, [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 154, 241, 155, 149, 162, 177, 26, 132, 23, 212, 102, 32, [2026-09-16 20:43:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 175, 160, 178, 1, 114, 228, 129, 58, 2, 121, 236, 77, [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 126, 67, 94, 161, [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ... 1157 more items [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: list: [ 'studio-api.suno.ai:443:::::::::::::::::::::' ] [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): false, [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socketPath: undefined, [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxHeaderSize: undefined, [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: insecureHTTPParser: false, [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: '/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _ended: true, [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: res: IncomingMessage { [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: { [2026-09-16 20:43:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: undefined, [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function: handleStreamError], [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: [Function: handleStreamData], [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [ [Function: responseOnEnd], [Function: handleStreamEnd] ], [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: readable: undefined, [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function: handlerStreamAborted] [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 20:43:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: buffer: [], [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferIndex: 0, [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipes: [], [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: awaitDrainWriters: null, [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 194779004 [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: null, [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: httpVersionMajor: 1, [2026-09-16 20:43:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: httpVersionMinor: 1, [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: httpVersion: '1.1', [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: complete: true, [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rawHeaders: [ [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Date', [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Wed, 16 Sep 2026 12:43:27 GMT', [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type', [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'text/html; charset=utf-8', [2026-09-16 20:43:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Length', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '256', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'keep-alive', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'x-render-routing', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'suspend-by-user', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'cf-cache-status', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'DYNAMIC', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Server', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'cloudflare', [2026-09-16 20:43:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'CF-RAY', [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'a3bff4f73c667e85-KIX', [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'alt-svc', [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'h3=":443"; ma=86400' [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rawTrailers: [], [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: false, [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: upgrade: false, [2026-09-16 20:43:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: '', [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: null, [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: statusCode: 503, [2026-09-16 20:43:55] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:43:55] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:43:55] [0.6.1] [ERROR] online_music.py:1401: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: statusMessage: 'Service Unavailable', [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: client: TLSSocket { [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: { [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: undefined, [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipe: false, [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isServer: false, [2026-09-16 20:43:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requestCert: true, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rejectUnauthorized: true, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: session: undefined, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ALPNProtocols: undefined, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requestOCSP: undefined, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: enableTrace: undefined, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pskCallback: undefined, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: undefined, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onread: undefined, [2026-09-16 20:43:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: signal: undefined [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 20:43:57] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:43:57] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:43:57] [0.6.1] [ERROR] online_music.py:1401: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 20:43:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: [ [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onSocketCloseDestroySSL], [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function], [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onClose] [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:43:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [Function: onReadableStreamEnd], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [ [Function: handleSocketError], [Function] ], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: keylogNewListener], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: undefined, [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secure: [Function: onConnectSecure], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: session: [Function (anonymous)], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function: onFree], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [ [Function: onTimeout], [Function (anonymous)] ], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentRemove: [Function: onRemove], [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined, [2026-09-16 20:43:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: drain: undefined [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'studio-api.suno.ai', [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 20:44:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: buffer: [], [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferIndex: 0, [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipes: [], [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: awaitDrainWriters: null, [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 60303620 [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: WritableState { [2026-09-16 20:44:01] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:44:01] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:44:01] [0.6.1] [ERROR] online_music.py:1401: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 20:44:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: corked: 0, [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onwrite: [Function: bound onwrite], [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writelen: 0, [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferedIndex: 0, [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pendingcb: 0, [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 17563908, [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferedValue): null, [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kWriteCbValue): null [2026-09-16 20:44:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: TLSWrap { [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: TCP { [2026-09-16 20:44:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: [Getter/Setter], [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onconnection: null, [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parentWrap: null, [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: true, [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onkeylog: [Function: onkeylog], [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakestart: [Function: noop], [2026-09-16 20:44:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakedone: [Function (anonymous)], [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onocspresponse: [Function: onocspresponse], [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onnewsession: [Function: onnewsessionclient], [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onerror: [Function: onerror], [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 20:44:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [ '216.24.57.15:443' ], [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): TLSWrap { [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: TCP { [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: [Getter/Setter], [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onconnection: null, [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parentWrap: null, [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: true, [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onkeylog: [Function: onkeylog], [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakestart: [Function: noop], [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakedone: [Function (anonymous)], [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onocspresponse: [Function: onocspresponse], [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onnewsession: [Function: onnewsessionclient], [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onerror: [Function: onerror], [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:44:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): TLSWrap { [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: TCP { [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: [Getter/Setter], [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onconnection: null, [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parentWrap: null, [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: reading: true, [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onkeylog: [Function: onkeylog], [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakestart: [Function: noop], [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onhandshakedone: [Function (anonymous)], [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onocspresponse: [Function: onocspresponse], [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onnewsession: [Function: onnewsessionclient], [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onerror: [Function: onerror], [2026-09-16 20:44:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(owner_symbol): [Circular *1] [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): Timeout { [2026-09-16 20:44:10] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:44:10] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:44:10] [0.6.1] [ERROR] online_music.py:1401: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleTimeout: 5000, [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idlePrev: TimersList { [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleNext: [Circular *2], [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idlePrev: [Circular *2], [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: expiry: 8366, [2026-09-16 20:44:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: id: -9007199254740991, [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: msecs: 5000, [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: priorityQueuePosition: 1 [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleNext: TimersList { [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleNext: [Circular *2], [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idlePrev: [Circular *2], [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: expiry: 8366, [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: id: -9007199254740991, [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: msecs: 5000, [2026-09-16 20:44:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: priorityQueuePosition: 1 [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _idleStart: 3573, [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onTimeout: [Function: bound ], [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _timerArgs: undefined, [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _repeat: null, [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _destroyed: false, [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(refed): false, [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHasPrimitive): false, [2026-09-16 20:44:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(asyncId): 42, [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(triggerId): 40, [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kAsyncContextFrame): undefined [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:13] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:44:13] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 bilibili 搜索失败: Plugin bilibili not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Plugin 快手 not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Plugin 猫耳FM not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Plugin udio not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Plugin suno not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Plugin Navidrome not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Plugin 歌词千寻 not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Plugin 歌词网 not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Plugin Audiomack not found or not loaded [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 20:44:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 1, [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): { [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rejectUnauthorized: true, [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ciphers: 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA', [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: checkServerIdentity: [Function: checkServerIdentity], [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: minDHSize: 1024, [2026-09-16 20:44:14] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:44:14] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 bilibili 搜索失败: Plugin bilibili not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Plugin 快手 not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Plugin 猫耳FM not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Plugin udio not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Plugin suno not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Plugin Navidrome not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Plugin 歌词千寻 not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Plugin 歌词网 not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Plugin Audiomack not found or not loaded [2026-09-16 20:44:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRedirects: 21, [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: Infinity, [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null, [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: [Object: null prototype] { [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61', [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 20:44:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agents: { http: undefined, https: undefined }, [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: auth: undefined, [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: family: undefined, [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: beforeRedirect: [Function: dispatchBeforeRedirect], [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: beforeRedirects: [Object: null prototype] { [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxy: [Function: beforeRedirect] [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: http2Options: undefined, [2026-09-16 20:44:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: hostname: 'studio-api.suno.ai', [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: port: 443, [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: undefined, [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: insecureHTTPParser: false, [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: nativeProtocols: { 'http:': [Object], 'https:': [Object] }, [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sensitiveHeaders: [], [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pathname: '/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/', [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: search: '?page=0', [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultAgent: Agent { [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 20:44:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype], [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] {}, [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype], [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveMsecs: 1000, [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxSockets: Infinity, [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxFreeSockets: 256, [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxTotalSockets: Infinity, [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: totalSocketCount: 1, [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentKeepAliveTimeoutBuffer: 1000, [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxCachedSessions: 100, [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sessionCache: [Object], [2026-09-16 20:44:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): false, [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 20:44:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _agentKey: 'studio-api.suno.ai:443:::::::::::::::::::::', [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encoding: null, [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveInitialDelay: 1000 [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.socketListener): true, [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.currentReq): Writable { [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: { [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: [Function], [2026-09-16 20:44:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function: handleRequestError], [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: prefinish: undefined, [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: undefined, [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: drain: undefined, [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: response: [Function: handleResponse], [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Array], [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: undefined [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: WritableState { [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 20:44:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: corked: 0, [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onwrite: [Function: bound onwrite], [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writelen: 0, [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferedIndex: 0, [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pendingcb: 0, [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 17580812, [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferedValue): null [2026-09-16 20:44:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 20:44:23] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 20:44:23] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 20:45:30] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:45:30] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:45:30] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:45:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:45:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789562730793"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562730793: True [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789562731194"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562731194: True [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789562731495"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562731495: True [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:45:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789562731797"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562731797: True [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789562732098"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562732098: True [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789562732399"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562732399: True [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:45:32] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:45:32] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 20:45:32] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 20:45:33] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:33] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u97f3\u60a6\u53f0", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageNum = 20;\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d;\n return {\n id: item.id,\n title: item.title,\n artist: (item === null || item === void 0 ? void 0 : item.allArtistNames) ||\n ((_b = (_a = item.artists) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (s) => s.name).join(\", \")) ||\n ((_c = item.user) === null || _c === void 0 ? void 0 : _c.niceName),\n artwork: item === null || item === void 0 ? void 0 : item.headImg,\n urls: (_d = item === null || item === void 0 ? void 0 : item.fullClip) === null || _d === void 0 ? void 0 : _d.urls,\n };\n}\nfunction formatArtistItem(item) {\n return {\n id: item.id,\n name: item.name,\n avatar: item.headImg,\n };\n}\nlet lastQuery;\nlet lastMusicId;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n lastMusicId = 0;\n }\n lastQuery = query;\n let data = JSON.stringify({\n searchType: \"MV\",\n key: query,\n sinceId: lastMusicId,\n size: pageNum,\n requestTagRows: [\n {\n key: \"sortType\",\n chosenTags: [\"HOTTEST\"],\n },\n {\n key: \"source\",\n chosenTags: [\"-1\"],\n },\n {\n key: \"duration\",\n chosenTags: [\"-1\"],\n },\n ],\n });\n let config = {\n method: \"post\",\n maxBodyLength: Infinity,\n url: \"https://search-api.yinyuetai.com/search/get_search_result.json\",\n headers: {\n referrer: \"https://www.yinyuetai.com/\",\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n wua: \"YYT/1.0.0 (WEB;web;11;zh-CN;kADiV2jNJFy2ryvuyB5Ne)\",\n },\n data: data,\n };\n const response = (await axios_1.default.request(config)).data.data;\n lastMusicId = response[response.length - 1].id;\n return {\n isEnd: pageNum > response.length,\n data: response.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n let url;\n if (quality === \"standard\") {\n url = musicItem.urls.find((it) => it.streamType === 5).url;\n }\n else if (quality === \"high\") {\n url = musicItem.urls.find((it) => it.streamType === 1).url;\n }\n return {\n url,\n };\n}\nmodule.exports = {\n platform: \"\u97f3\u60a6\u53f0\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/yinyuetai/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789562733702"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:33] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 音悦台, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562733702: True [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 音悦台 [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDAV", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst webdav_1 = require(\"webdav\");\nlet cachedData = {};\nfunction getClient() {\n var _a, _b, _c;\n const { url, username, password, searchPath } = (_b = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables) === null || _a === void 0 ? void 0 : _a.call(env)) !== null && _b !== void 0 ? _b : {};\n if (!(url && username && password)) {\n return null;\n }\n if (!(cachedData.url === url &&\n cachedData.username === username &&\n cachedData.password === password &&\n cachedData.searchPath === searchPath)) {\n cachedData.url = url;\n cachedData.username = username;\n cachedData.password = password;\n cachedData.searchPath = searchPath;\n cachedData.searchPathList = (_c = searchPath === null || searchPath === void 0 ? void 0 : searchPath.split) === null || _c === void 0 ? void 0 : _c.call(searchPath, \",\");\n cachedData.cacheFileList = null;\n }\n return (0, webdav_1.createClient)(url, {\n authType: webdav_1.AuthType.Password,\n username,\n password,\n });\n}\nasync function searchMusic(query) {\n var _a, _b;\n const client = getClient();\n if (!cachedData.cacheFileList) {\n const searchPathList = ((_a = cachedData.searchPathList) === null || _a === void 0 ? void 0 : _a.length)\n ? cachedData.searchPathList\n : [\"/\"];\n let result = [];\n for (let search of searchPathList) {\n try {\n const fileItems = (await client.getDirectoryContents(search)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n result = [...result, ...fileItems];\n }\n catch (_c) { }\n }\n cachedData.cacheFileList = result;\n }\n return {\n isEnd: true,\n data: ((_b = cachedData.cacheFileList) !== null && _b !== void 0 ? _b : [])\n .filter((it) => it.basename.includes(query))\n .map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nasync function getTopLists() {\n getClient();\n const data = {\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: (cachedData.searchPathList || []).map((it) => ({\n title: it,\n id: it,\n })),\n };\n return [data];\n}\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n const fileItems = (await client.getDirectoryContents(topListItem.id)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n return {\n musicList: fileItems.map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"\u732b\u5934\u732b\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\",\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n },\n ],\n version: \"0.0.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/webdav/index.js\",\n cacheControl: \"no-cache\",\n search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n },\n getTopLists,\n getTopListDetail,\n getMediaSource(musicItem) {\n const client = getClient();\n return {\n url: client.getFileDownloadLink(musicItem.id),\n };\n },\n};", "id": "msg_1789562734107"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:45:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDAV, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562734107: False [2026-09-16 20:45:34] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "bilibili", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require(\"cheerio\");\nconst UA = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\";\nconst headers = {\n \"user-agent\": UA,\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie = null;\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: { \"User-Agent\": UA },\n })).data.data;\n }\n return cookie;\n}\nfunction getCookieString() {\n if (!cookie)\n return \"\";\n return `buvid3=${cookie.b_3};buvid4=${cookie.b_4}`;\n}\nasync function getCid(bvid, aid) {\n const params = bvid ? { bvid } : { aid };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view\", {\n headers,\n params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n const dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": UA,\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page,\n order: \"\",\n page_size: pageSize,\n keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: getCookieString() }),\n params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": UA,\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": UA,\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: getCookieString() }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b, _c, _d, _e, _f;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n const len = audios.length;\n switch (quality) {\n case \"low\":\n url = (_a = audios[0]) === null || _a === void 0 ? void 0 : _a.baseUrl;\n break;\n case \"standard\":\n url = (_b = audios[Math.min(1, len - 1)]) === null || _b === void 0 ? void 0 : _b.baseUrl;\n break;\n case \"high\":\n url = (_c = audios[Math.min(2, len - 1)]) === null || _c === void 0 ? void 0 : _c.baseUrl;\n break;\n case \"super\":\n url = (_d = audios[len - 1]) === null || _d === void 0 ? void 0 : _d.baseUrl;\n break;\n }\n if (!url) {\n url = (_e = audios[len - 1]) === null || _e === void 0 ? void 0 : _e.baseUrl;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_f = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _f !== void 0 ? _f : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n await getCookie();\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: Object.assign(Object.assign({}, headers), { cookie: getCookieString() }),\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n await getCookie();\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\", cookie: getCookieString() }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: (((_a = res.data.data) === null || _a === void 0 ? void 0 : _a.list) || []).map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"bilibili\",\n appVersion: \">=0.0\",\n version: \"0.3.0\",\n author: \"\u732b\u5934\u732b\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/bilibili/index.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789562734410"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: bilibili, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562734410: True [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: bilibili [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:45:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u7f51", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://zh.followlyrics.com/search', {\n params: {\n name: query,\n type: 'song'\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.table.table-striped > tbody');\n const items = results.children('tr');\n const data = items.map((index, el) => {\n const tds = $(el).children();\n const title = $(tds.get(0)).text().trim();\n const artist = $(tds.get(1)).text().trim();\n const album = $(tds.get(2)).text().trim();\n const id = $(tds.get(3)).children('a').attr('href');\n return {\n title,\n artist,\n album,\n id\n };\n }).toArray();\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('div#lyrics').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u7f51\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789562734711"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词网, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562734711: True [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词网 [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Navidrome", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst pageSize = 25;\nasync function httpGet(urlPath, params) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n console.log(userVariables);\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const preParams = {\n u: username,\n s: salt,\n t: CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex),\n c: \"MusicFree\",\n v: \"1.14.1\",\n f: \"json\",\n };\n return (await axios_1.default.get(`${url}/rest/${urlPath}`, {\n params: Object.assign(Object.assign({}, preParams), params),\n })).data;\n}\nfunction formatMusicItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatAlbumItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatArtistItem(it) {\n return Object.assign(Object.assign({}, it), { avatar: it.artistImageUrl });\n}\nasync function searchMusic(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function searchAlbum(query, page) {\n const data = await httpGet('search2', {\n query,\n albumCount: pageSize,\n albumOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.album;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatAlbumItem)\n };\n}\nasync function searchArtist(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function getAlbumInfo(albumItem) {\n const data = await httpGet('getAlbum', {\n id: albumItem.id\n });\n return {\n isEnd: true,\n data: data['subsonic-response'].album.song.map(formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"Navidrome\",\n version: \"0.0.0\",\n author: '\u732b\u5934\u732b',\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/navidrome/index.js\",\n cacheControl: \"no-cache\",\n userVariables: [\n {\n key: \"url\",\n name: \"\u670d\u52a1\u5668\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n },\n ],\n supportedSearchType: [\"music\", \"album\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n async getMediaSource(musicItem) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const urlObj = new URL(`${url}/rest/stream`);\n urlObj.searchParams.append('u', username);\n urlObj.searchParams.append('s', salt);\n urlObj.searchParams.append('t', CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex));\n urlObj.searchParams.append('c', 'MusicFree');\n urlObj.searchParams.append('v', '1.14.1');\n urlObj.searchParams.append('f', 'json');\n urlObj.searchParams.append('id', musicItem.id);\n return {\n url: urlObj.toString()\n };\n }\n};", "id": "msg_1789562735012"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Navidrome, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562735012: True [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Navidrome [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:45:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Youtube", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: item.videoId,\n title: (_b = (_a = item.title.runs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text,\n artist: (_d = (_c = item.ownerText.runs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text,\n artwork: (_g = (_f = (_e = item === null || item === void 0 ? void 0 : item.thumbnail) === null || _e === void 0 ? void 0 : _e.thumbnails) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.url,\n };\n}\nlet lastQuery;\nlet musicContinToken;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n musicContinToken = undefined;\n }\n lastQuery = query;\n let data = JSON.stringify({\n context: {\n client: {\n hl: \"zh-CN\",\n gl: \"US\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0,gzip(gfe)\",\n clientName: \"WEB\",\n clientVersion: \"2.20231121.08.00\",\n osName: \"Windows\",\n osVersion: \"10.0\",\n platform: \"DESKTOP\",\n userInterfaceTheme: \"USER_INTERFACE_THEME_LIGHT\",\n browserName: \"Edge Chromium\",\n browserVersion: \"119.0.0.0\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n screenWidthPoints: 1358,\n screenHeightPoints: 1012,\n screenPixelDensity: 1,\n screenDensityFloat: 1.2395833730697632,\n utcOffsetMinutes: 480,\n memoryTotalKbytes: \"8000000\",\n mainAppWebInfo: {\n pwaInstallabilityStatus: \"PWA_INSTALLABILITY_STATUS_UNKNOWN\",\n webDisplayMode: \"WEB_DISPLAY_MODE_BROWSER\",\n isWebNativeShareAvailable: true,\n },\n timeZone: \"Asia/Shanghai\",\n },\n user: {\n lockedSafetyMode: false,\n },\n request: {\n useSsl: true,\n internalExperimentFlags: [],\n },\n },\n query: musicContinToken ? undefined : query,\n continuation: musicContinToken || undefined,\n });\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/search?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n data: data,\n };\n const response = (await (0, axios_1.default)(config)).data;\n const contents = response.contents.twoColumnSearchResultsRenderer.primaryContents\n .sectionListRenderer.contents;\n const isEndItem = contents.find((it) => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = it.continuationItemRenderer) === null || _a === void 0 ? void 0 : _a.continuationEndpoint) === null || _b === void 0 ? void 0 : _b.continuationCommand) === null || _c === void 0 ? void 0 : _c.request) === \"CONTINUATION_REQUEST_TYPE_SEARCH\";\n });\n if (isEndItem) {\n musicContinToken =\n isEndItem.continuationItemRenderer.continuationEndpoint\n .continuationCommand.token;\n }\n const musicData = contents.find((it) => it.itemSectionRenderer)\n .itemSectionRenderer.contents;\n let resultMusicData = [];\n for (let i = 0; i < musicData.length; ++i) {\n if (musicData[i].videoRenderer) {\n resultMusicData.push(formatMusicItem(musicData[i].videoRenderer));\n }\n }\n return {\n isEnd: !isEndItem,\n data: resultMusicData,\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nlet cacheMediaSource = {\n id: null,\n urls: {},\n};\nfunction getQuality(label) {\n if (label === \"small\") {\n return \"standard\";\n }\n else if (label === \"tiny\") {\n return \"low\";\n }\n else if (label === \"medium\") {\n return \"high\";\n }\n else if (label === \"large\") {\n return \"super\";\n }\n else {\n return \"standard\";\n }\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b;\n if (musicItem.id === cacheMediaSource.id) {\n return {\n url: cacheMediaSource.urls[quality],\n };\n }\n cacheMediaSource = {\n id: null,\n urls: {},\n };\n const data = {\n context: {\n client: {\n screenWidthPoints: 689,\n screenHeightPoints: 963,\n screenPixelDensity: 1,\n utcOffsetMinutes: 120,\n hl: \"en\",\n gl: \"GB\",\n remoteHost: \"1.1.1.1\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"com.google.android.apps.youtube.music/6.14.50 (Linux; U; Android 13; GB) gzip\",\n clientName: \"ANDROID_MUSIC\",\n clientVersion: \"6.14.50\",\n osName: \"Android\",\n osVersion: \"13\",\n originalUrl: \"https://www.youtube.com/tv?is_account_switch=1&hrld=1&fltor=1\",\n theme: \"CLASSIC\",\n platform: \"MOBILE\",\n clientFormFactor: \"UNKNOWN_FORM_FACTOR\",\n webpSupport: false,\n timeZone: \"Europe/Amsterdam\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\",\n },\n user: { enableSafetyMode: false },\n request: {\n internalExperimentFlags: [],\n consistencyTokenJars: [],\n },\n },\n contentCheckOk: true,\n racyCheckOk: true,\n video_id: musicItem.id,\n };\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/player?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n data: JSON.stringify(data),\n };\n const result = (await (0, axios_1.default)(config)).data;\n const formats = (_a = result.streamingData.formats) !== null && _a !== void 0 ? _a : [];\n const adaptiveFormats = (_b = result.streamingData.adaptiveFormats) !== null && _b !== void 0 ? _b : [];\n [...formats, ...adaptiveFormats].forEach((it) => {\n const q = getQuality(it.quality);\n if (q && it.url && !cacheMediaSource.urls[q]) {\n cacheMediaSource.urls[q] = it.url;\n }\n });\n return {\n url: cacheMediaSource.urls[quality],\n };\n}\nmodule.exports = {\n platform: \"Youtube\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/youtube/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789562735313"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Youtube, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789562735313: True [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Youtube [2026-09-16 20:45:35] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'status': 'loaded', 'load_time': 1789562731.194339, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789562731.495603, 'enabled': True}, 'udio': {'status': 'loaded', 'load_time': 1789562731.7966998, 'enabled': True}, '快手': {'status': 'loaded', 'load_time': 1789562732.0977771, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789562732.3988223, 'enabled': True}, 'suno': {'status': 'loaded', 'load_time': 1789562732.6998675, 'enabled': True}, '音悦台': {'status': 'loaded', 'load_time': 1789562734.1068664, 'enabled': True}, 'bilibili': {'status': 'loaded', 'load_time': 1789562734.7108202, 'enabled': True}, '歌词网': {'status': 'loaded', 'load_time': 1789562735.0122721, 'enabled': True}, 'Navidrome': {'status': 'loaded', 'load_time': 1789562735.313333, 'enabled': True}, 'Youtube': {'status': 'loaded', 'load_time': 1789562735.6149056, 'enabled': True}} [2026-09-16 20:50:44] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:50:44] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:50:44] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:50:44] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:50:44] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:44] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789563044931"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:45] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563044931: True [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:45] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789563045233"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:45] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563045233: True [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:45] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789563045534"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:45] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563045534: True [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:50:45] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:45] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789563045835"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:45] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563045835: True [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789563046136"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563046136: True [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789563046438"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563046438: True [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:50:46] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u97f3\u60a6\u53f0", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageNum = 20;\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d;\n return {\n id: item.id,\n title: item.title,\n artist: (item === null || item === void 0 ? void 0 : item.allArtistNames) ||\n ((_b = (_a = item.artists) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (s) => s.name).join(\", \")) ||\n ((_c = item.user) === null || _c === void 0 ? void 0 : _c.niceName),\n artwork: item === null || item === void 0 ? void 0 : item.headImg,\n urls: (_d = item === null || item === void 0 ? void 0 : item.fullClip) === null || _d === void 0 ? void 0 : _d.urls,\n };\n}\nfunction formatArtistItem(item) {\n return {\n id: item.id,\n name: item.name,\n avatar: item.headImg,\n };\n}\nlet lastQuery;\nlet lastMusicId;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n lastMusicId = 0;\n }\n lastQuery = query;\n let data = JSON.stringify({\n searchType: \"MV\",\n key: query,\n sinceId: lastMusicId,\n size: pageNum,\n requestTagRows: [\n {\n key: \"sortType\",\n chosenTags: [\"HOTTEST\"],\n },\n {\n key: \"source\",\n chosenTags: [\"-1\"],\n },\n {\n key: \"duration\",\n chosenTags: [\"-1\"],\n },\n ],\n });\n let config = {\n method: \"post\",\n maxBodyLength: Infinity,\n url: \"https://search-api.yinyuetai.com/search/get_search_result.json\",\n headers: {\n referrer: \"https://www.yinyuetai.com/\",\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n wua: \"YYT/1.0.0 (WEB;web;11;zh-CN;kADiV2jNJFy2ryvuyB5Ne)\",\n },\n data: data,\n };\n const response = (await axios_1.default.request(config)).data.data;\n lastMusicId = response[response.length - 1].id;\n return {\n isEnd: pageNum > response.length,\n data: response.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n let url;\n if (quality === \"standard\") {\n url = musicItem.urls.find((it) => it.streamType === 5).url;\n }\n else if (quality === \"high\") {\n url = musicItem.urls.find((it) => it.streamType === 1).url;\n }\n return {\n url,\n };\n}\nmodule.exports = {\n platform: \"\u97f3\u60a6\u53f0\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/yinyuetai/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789563046739"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 音悦台, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563046739: True [2026-09-16 20:50:47] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 音悦台 [2026-09-16 20:50:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:50:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDAV", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst webdav_1 = require(\"webdav\");\nlet cachedData = {};\nfunction getClient() {\n var _a, _b, _c;\n const { url, username, password, searchPath } = (_b = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables) === null || _a === void 0 ? void 0 : _a.call(env)) !== null && _b !== void 0 ? _b : {};\n if (!(url && username && password)) {\n return null;\n }\n if (!(cachedData.url === url &&\n cachedData.username === username &&\n cachedData.password === password &&\n cachedData.searchPath === searchPath)) {\n cachedData.url = url;\n cachedData.username = username;\n cachedData.password = password;\n cachedData.searchPath = searchPath;\n cachedData.searchPathList = (_c = searchPath === null || searchPath === void 0 ? void 0 : searchPath.split) === null || _c === void 0 ? void 0 : _c.call(searchPath, \",\");\n cachedData.cacheFileList = null;\n }\n return (0, webdav_1.createClient)(url, {\n authType: webdav_1.AuthType.Password,\n username,\n password,\n });\n}\nasync function searchMusic(query) {\n var _a, _b;\n const client = getClient();\n if (!cachedData.cacheFileList) {\n const searchPathList = ((_a = cachedData.searchPathList) === null || _a === void 0 ? void 0 : _a.length)\n ? cachedData.searchPathList\n : [\"/\"];\n let result = [];\n for (let search of searchPathList) {\n try {\n const fileItems = (await client.getDirectoryContents(search)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n result = [...result, ...fileItems];\n }\n catch (_c) { }\n }\n cachedData.cacheFileList = result;\n }\n return {\n isEnd: true,\n data: ((_b = cachedData.cacheFileList) !== null && _b !== void 0 ? _b : [])\n .filter((it) => it.basename.includes(query))\n .map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nasync function getTopLists() {\n getClient();\n const data = {\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: (cachedData.searchPathList || []).map((it) => ({\n title: it,\n id: it,\n })),\n };\n return [data];\n}\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n const fileItems = (await client.getDirectoryContents(topListItem.id)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n return {\n musicList: fileItems.map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"\u732b\u5934\u732b\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\",\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n },\n ],\n version: \"0.0.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/webdav/index.js\",\n cacheControl: \"no-cache\",\n search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n },\n getTopLists,\n getTopListDetail,\n getMediaSource(musicItem) {\n const client = getClient();\n return {\n url: client.getFileDownloadLink(musicItem.id),\n };\n },\n};", "id": "msg_1789563047040"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:50:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDAV, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 20:50:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 20:50:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563047040: False [2026-09-16 20:50:47] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:50:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:50:47] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:50:47] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 20:50:47] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 20:50:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "bilibili", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require(\"cheerio\");\nconst UA = \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\";\nconst headers = {\n \"user-agent\": UA,\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie = null;\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: { \"User-Agent\": UA },\n })).data.data;\n }\n return cookie;\n}\nfunction getCookieString() {\n if (!cookie)\n return \"\";\n return `buvid3=${cookie.b_3};buvid4=${cookie.b_4}`;\n}\nasync function getCid(bvid, aid) {\n const params = bvid ? { bvid } : { aid };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view\", {\n headers,\n params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n const dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": UA,\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page,\n order: \"\",\n page_size: pageSize,\n keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: getCookieString() }),\n params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": UA,\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": UA,\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: getCookieString() }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b, _c, _d, _e, _f;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n const len = audios.length;\n switch (quality) {\n case \"low\":\n url = (_a = audios[0]) === null || _a === void 0 ? void 0 : _a.baseUrl;\n break;\n case \"standard\":\n url = (_b = audios[Math.min(1, len - 1)]) === null || _b === void 0 ? void 0 : _b.baseUrl;\n break;\n case \"high\":\n url = (_c = audios[Math.min(2, len - 1)]) === null || _c === void 0 ? void 0 : _c.baseUrl;\n break;\n case \"super\":\n url = (_d = audios[len - 1]) === null || _d === void 0 ? void 0 : _d.baseUrl;\n break;\n }\n if (!url) {\n url = (_e = audios[len - 1]) === null || _e === void 0 ? void 0 : _e.baseUrl;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_f = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _f !== void 0 ? _f : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n await getCookie();\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: Object.assign(Object.assign({}, headers), { cookie: getCookieString() }),\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n await getCookie();\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\", cookie: getCookieString() }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: (((_a = res.data.data) === null || _a === void 0 ? void 0 : _a.list) || []).map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"bilibili\",\n appVersion: \">=0.0\",\n version: \"0.3.0\",\n author: \"\u732b\u5934\u732b\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/bilibili/index.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789563048348"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: bilibili, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563048348: True [2026-09-16 20:50:48] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: bilibili [2026-09-16 20:50:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:50:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u7f51", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://zh.followlyrics.com/search', {\n params: {\n name: query,\n type: 'song'\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.table.table-striped > tbody');\n const items = results.children('tr');\n const data = items.map((index, el) => {\n const tds = $(el).children();\n const title = $(tds.get(0)).text().trim();\n const artist = $(tds.get(1)).text().trim();\n const album = $(tds.get(2)).text().trim();\n const id = $(tds.get(3)).children('a').attr('href');\n return {\n title,\n artist,\n album,\n id\n };\n }).toArray();\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('div#lyrics').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u7f51\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789563048749"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词网, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563048749: True [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词网 [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Navidrome", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst pageSize = 25;\nasync function httpGet(urlPath, params) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n console.log(userVariables);\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const preParams = {\n u: username,\n s: salt,\n t: CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex),\n c: \"MusicFree\",\n v: \"1.14.1\",\n f: \"json\",\n };\n return (await axios_1.default.get(`${url}/rest/${urlPath}`, {\n params: Object.assign(Object.assign({}, preParams), params),\n })).data;\n}\nfunction formatMusicItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatAlbumItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatArtistItem(it) {\n return Object.assign(Object.assign({}, it), { avatar: it.artistImageUrl });\n}\nasync function searchMusic(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function searchAlbum(query, page) {\n const data = await httpGet('search2', {\n query,\n albumCount: pageSize,\n albumOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.album;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatAlbumItem)\n };\n}\nasync function searchArtist(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function getAlbumInfo(albumItem) {\n const data = await httpGet('getAlbum', {\n id: albumItem.id\n });\n return {\n isEnd: true,\n data: data['subsonic-response'].album.song.map(formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"Navidrome\",\n version: \"0.0.0\",\n author: '\u732b\u5934\u732b',\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/navidrome/index.js\",\n cacheControl: \"no-cache\",\n userVariables: [\n {\n key: \"url\",\n name: \"\u670d\u52a1\u5668\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n },\n ],\n supportedSearchType: [\"music\", \"album\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n async getMediaSource(musicItem) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const urlObj = new URL(`${url}/rest/stream`);\n urlObj.searchParams.append('u', username);\n urlObj.searchParams.append('s', salt);\n urlObj.searchParams.append('t', CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex));\n urlObj.searchParams.append('c', 'MusicFree');\n urlObj.searchParams.append('v', '1.14.1');\n urlObj.searchParams.append('f', 'json');\n urlObj.searchParams.append('id', musicItem.id);\n return {\n url: urlObj.toString()\n };\n }\n};", "id": "msg_1789563049050"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Navidrome, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563049050: True [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Navidrome [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:50:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Youtube", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: item.videoId,\n title: (_b = (_a = item.title.runs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text,\n artist: (_d = (_c = item.ownerText.runs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text,\n artwork: (_g = (_f = (_e = item === null || item === void 0 ? void 0 : item.thumbnail) === null || _e === void 0 ? void 0 : _e.thumbnails) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.url,\n };\n}\nlet lastQuery;\nlet musicContinToken;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n musicContinToken = undefined;\n }\n lastQuery = query;\n let data = JSON.stringify({\n context: {\n client: {\n hl: \"zh-CN\",\n gl: \"US\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0,gzip(gfe)\",\n clientName: \"WEB\",\n clientVersion: \"2.20231121.08.00\",\n osName: \"Windows\",\n osVersion: \"10.0\",\n platform: \"DESKTOP\",\n userInterfaceTheme: \"USER_INTERFACE_THEME_LIGHT\",\n browserName: \"Edge Chromium\",\n browserVersion: \"119.0.0.0\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n screenWidthPoints: 1358,\n screenHeightPoints: 1012,\n screenPixelDensity: 1,\n screenDensityFloat: 1.2395833730697632,\n utcOffsetMinutes: 480,\n memoryTotalKbytes: \"8000000\",\n mainAppWebInfo: {\n pwaInstallabilityStatus: \"PWA_INSTALLABILITY_STATUS_UNKNOWN\",\n webDisplayMode: \"WEB_DISPLAY_MODE_BROWSER\",\n isWebNativeShareAvailable: true,\n },\n timeZone: \"Asia/Shanghai\",\n },\n user: {\n lockedSafetyMode: false,\n },\n request: {\n useSsl: true,\n internalExperimentFlags: [],\n },\n },\n query: musicContinToken ? undefined : query,\n continuation: musicContinToken || undefined,\n });\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/search?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n data: data,\n };\n const response = (await (0, axios_1.default)(config)).data;\n const contents = response.contents.twoColumnSearchResultsRenderer.primaryContents\n .sectionListRenderer.contents;\n const isEndItem = contents.find((it) => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = it.continuationItemRenderer) === null || _a === void 0 ? void 0 : _a.continuationEndpoint) === null || _b === void 0 ? void 0 : _b.continuationCommand) === null || _c === void 0 ? void 0 : _c.request) === \"CONTINUATION_REQUEST_TYPE_SEARCH\";\n });\n if (isEndItem) {\n musicContinToken =\n isEndItem.continuationItemRenderer.continuationEndpoint\n .continuationCommand.token;\n }\n const musicData = contents.find((it) => it.itemSectionRenderer)\n .itemSectionRenderer.contents;\n let resultMusicData = [];\n for (let i = 0; i < musicData.length; ++i) {\n if (musicData[i].videoRenderer) {\n resultMusicData.push(formatMusicItem(musicData[i].videoRenderer));\n }\n }\n return {\n isEnd: !isEndItem,\n data: resultMusicData,\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nlet cacheMediaSource = {\n id: null,\n urls: {},\n};\nfunction getQuality(label) {\n if (label === \"small\") {\n return \"standard\";\n }\n else if (label === \"tiny\") {\n return \"low\";\n }\n else if (label === \"medium\") {\n return \"high\";\n }\n else if (label === \"large\") {\n return \"super\";\n }\n else {\n return \"standard\";\n }\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b;\n if (musicItem.id === cacheMediaSource.id) {\n return {\n url: cacheMediaSource.urls[quality],\n };\n }\n cacheMediaSource = {\n id: null,\n urls: {},\n };\n const data = {\n context: {\n client: {\n screenWidthPoints: 689,\n screenHeightPoints: 963,\n screenPixelDensity: 1,\n utcOffsetMinutes: 120,\n hl: \"en\",\n gl: \"GB\",\n remoteHost: \"1.1.1.1\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"com.google.android.apps.youtube.music/6.14.50 (Linux; U; Android 13; GB) gzip\",\n clientName: \"ANDROID_MUSIC\",\n clientVersion: \"6.14.50\",\n osName: \"Android\",\n osVersion: \"13\",\n originalUrl: \"https://www.youtube.com/tv?is_account_switch=1&hrld=1&fltor=1\",\n theme: \"CLASSIC\",\n platform: \"MOBILE\",\n clientFormFactor: \"UNKNOWN_FORM_FACTOR\",\n webpSupport: false,\n timeZone: \"Europe/Amsterdam\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\",\n },\n user: { enableSafetyMode: false },\n request: {\n internalExperimentFlags: [],\n consistencyTokenJars: [],\n },\n },\n contentCheckOk: true,\n racyCheckOk: true,\n video_id: musicItem.id,\n };\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/player?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n data: JSON.stringify(data),\n };\n const result = (await (0, axios_1.default)(config)).data;\n const formats = (_a = result.streamingData.formats) !== null && _a !== void 0 ? _a : [];\n const adaptiveFormats = (_b = result.streamingData.adaptiveFormats) !== null && _b !== void 0 ? _b : [];\n [...formats, ...adaptiveFormats].forEach((it) => {\n const q = getQuality(it.quality);\n if (q && it.url && !cacheMediaSource.urls[q]) {\n cacheMediaSource.urls[q] = it.url;\n }\n });\n return {\n url: cacheMediaSource.urls[quality],\n };\n}\nmodule.exports = {\n platform: \"Youtube\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/youtube/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789563049351"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Youtube, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563049351: True [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Youtube [2026-09-16 20:50:49] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'猫耳FM': {'status': 'loaded', 'load_time': 1789563045.232724, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789563045.533894, 'enabled': True}, 'udio': {'status': 'loaded', 'load_time': 1789563045.8350303, 'enabled': True}, '快手': {'status': 'loaded', 'load_time': 1789563046.136123, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789563046.4378252, 'enabled': True}, 'suno': {'status': 'loaded', 'load_time': 1789563046.7392058, 'enabled': True}, '音悦台': {'status': 'loaded', 'load_time': 1789563047.0402472, 'enabled': True}, 'bilibili': {'status': 'loaded', 'load_time': 1789563048.7495472, 'enabled': True}, '歌词网': {'status': 'loaded', 'load_time': 1789563049.0505917, 'enabled': True}, 'Navidrome': {'status': 'loaded', 'load_time': 1789563049.3515732, 'enabled': True}, 'Youtube': {'status': 'loaded', 'load_time': 1789563049.652634, 'enabled': True}} [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 5sing [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 5sing [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: CCTV听音 [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for CCTV听音 [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: GD音乐台 [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for GD音乐台 [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: GitCode [2026-09-16 20:55:25] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for GitCode [2026-09-16 20:55:25] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Navidrome already exists, will overwrite [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Navidrome [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Navidrome [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ Vip [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ Vip [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ_念心 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ_念心 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ_猫 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ_猫 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ_竹玥 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ_竹玥 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ歌词 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ歌词 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ音乐 (非VIP) [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ音乐 (非VIP) [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Q音 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Q音 [2026-09-16 20:55:26] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin WebDAV already exists, will overwrite [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: WebDAV [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for WebDAV [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: WebDav_lrc [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for WebDav_lrc [2026-09-16 20:55:26] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Youtube already exists, will overwrite [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Youtube [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Youtube [2026-09-16 20:55:26] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin bilibili already exists, will overwrite [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: bilibili [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for bilibili [2026-09-16 20:55:26] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin suno already exists, will overwrite [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: suno [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for suno [2026-09-16 20:55:26] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin udio already exists, will overwrite [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: udio [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for udio [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 书音FM [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 书音FM [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 云云音乐 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 云云音乐 [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 云音乐 (酷我非VIP) [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 云音乐 (酷我非VIP) [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力KG [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力KG [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力KW [2026-09-16 20:55:26] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力KW [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力MG [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力MG [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力QQ [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力QQ [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力WY [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力WY [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 千千 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 千千 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 哔哩哔哩 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 哔哩哔哩 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 哔哩哔哩_Cookie [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 哔哩哔哩_Cookie [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 喜马拉雅_竹侣 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 喜马拉雅_竹侣 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 喜马拉雅_笭鬼鬼 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 喜马拉雅_笭鬼鬼 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 好听轻音乐 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 好听轻音乐 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 小枸音乐 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 小枸音乐 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 小蜗音乐 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 小蜗音乐 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 开心汽水 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 开心汽水 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 弥音QQ [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 弥音QQ [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌曲宝 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌曲宝 [2026-09-16 20:55:27] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 歌词千寻 already exists, will overwrite [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌词千寻 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌词千寻 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 汽水qishui音乐 [2026-09-16 20:55:27] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 汽水qishui音乐 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 汽水vip [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 汽水vip [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 溯音网易 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 溯音网易 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 爱听 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 爱听 [2026-09-16 20:55:28] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 猫耳FM already exists, will overwrite [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 猫耳FM [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 猫耳FM [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 碳酸歌词 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 碳酸歌词 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 碳酸氢钠 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 碳酸氢钠 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 种子 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 种子 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_念心 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_念心 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_猫 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_猫 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_竹玥 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_竹玥 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_笭鬼鬼 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_笭鬼鬼 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易bimiao [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易bimiao [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易专辑 [2026-09-16 20:55:28] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易专辑 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易云 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易云 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易云电台 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易云电台 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易云音乐 (非VIP) [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易云音乐 (非VIP) [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易音乐 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易音乐 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 腾讯音乐 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 腾讯音乐 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 落月QQ [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 落月QQ [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 西瓜糖QQ [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 西瓜糖QQ [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 迟言QQ [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 迟言QQ [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我Fish [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我Fish [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我JHMS [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我JHMS [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_念心 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_念心 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_猫 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_猫 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_竹侣 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_竹侣 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_竹玥 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_竹玥 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我音乐Thomas [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我音乐Thomas [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗 [2026-09-16 20:55:29] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗JHMS [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗JHMS [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗Thomas [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗Thomas [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗_念心 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗_念心 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗_竹玥 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗_竹玥 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗简云 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗简云 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 闻音酷我 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 闻音酷我 [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:55:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789563330294"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563330294: True [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:55:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789563330595"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563330595: True [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:55:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:55:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789563330897"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563330897: True [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:55:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789563331198"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563331198: True [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:55:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789563331499"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563331499: True [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:55:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:55:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789563331800"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:55:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 20:55:32] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563331800: True [2026-09-16 20:55:32] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 20:55:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:55:32] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:55:32] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 20:55:32] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 20:56:02] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Message msg_1789563332107 timeout [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:56:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDAV", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst webdav_1 = require(\"webdav\");\nlet cachedData = {};\nfunction getClient() {\n var _a, _b, _c;\n const { url, username, password, searchPath } = (_b = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables) === null || _a === void 0 ? void 0 : _a.call(env)) !== null && _b !== void 0 ? _b : {};\n if (!(url && username && password)) {\n return null;\n }\n if (!(cachedData.url === url &&\n cachedData.username === username &&\n cachedData.password === password &&\n cachedData.searchPath === searchPath)) {\n cachedData.url = url;\n cachedData.username = username;\n cachedData.password = password;\n cachedData.searchPath = searchPath;\n cachedData.searchPathList = (_c = searchPath === null || searchPath === void 0 ? void 0 : searchPath.split) === null || _c === void 0 ? void 0 : _c.call(searchPath, \",\");\n cachedData.cacheFileList = null;\n }\n return (0, webdav_1.createClient)(url, {\n authType: webdav_1.AuthType.Password,\n username,\n password,\n });\n}\nasync function searchMusic(query) {\n var _a, _b;\n const client = getClient();\n if (!cachedData.cacheFileList) {\n const searchPathList = ((_a = cachedData.searchPathList) === null || _a === void 0 ? void 0 : _a.length)\n ? cachedData.searchPathList\n : [\"/\"];\n let result = [];\n for (let search of searchPathList) {\n try {\n const fileItems = (await client.getDirectoryContents(search)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n result = [...result, ...fileItems];\n }\n catch (_c) { }\n }\n cachedData.cacheFileList = result;\n }\n return {\n isEnd: true,\n data: ((_b = cachedData.cacheFileList) !== null && _b !== void 0 ? _b : [])\n .filter((it) => it.basename.includes(query))\n .map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nasync function getTopLists() {\n getClient();\n const data = {\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: (cachedData.searchPathList || []).map((it) => ({\n title: it,\n id: it,\n })),\n };\n return [data];\n}\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n const fileItems = (await client.getDirectoryContents(topListItem.id)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n return {\n musicList: fileItems.map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"\u732b\u5934\u732b\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\",\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n },\n ],\n version: \"0.0.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/webdav/index.js\",\n cacheControl: \"no-cache\",\n search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n },\n getTopLists,\n getTopListDetail,\n getMediaSource(musicItem) {\n const client = getClient();\n return {\n url: client.getFileDownloadLink(musicItem.id),\n };\n },\n};", "id": "msg_1789563362142"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDAV, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563362142: False [2026-09-16 20:56:02] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:56:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "bilibili", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"bilibili\",\n appVersion: \">=0.0\",\n version: \"0.2.3\",\n author: \"\u732b\u5934\u732b\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/bilibili/index.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789563362550"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 20:56:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: bilibili, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563362550: True [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: bilibili [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:56:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:56:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u7f51", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://zh.followlyrics.com/search', {\n params: {\n name: query,\n type: 'song'\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.table.table-striped > tbody');\n const items = results.children('tr');\n const data = items.map((index, el) => {\n const tds = $(el).children();\n const title = $(tds.get(0)).text().trim();\n const artist = $(tds.get(1)).text().trim();\n const album = $(tds.get(2)).text().trim();\n const id = $(tds.get(3)).children('a').attr('href');\n return {\n title,\n artist,\n album,\n id\n };\n }).toArray();\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('div#lyrics').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u7f51\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789563362852"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词网, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563362852: True [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词网 [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:56:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Navidrome", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst pageSize = 25;\nasync function httpGet(urlPath, params) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n console.log(userVariables);\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const preParams = {\n u: username,\n s: salt,\n t: CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex),\n c: \"MusicFree\",\n v: \"1.14.1\",\n f: \"json\",\n };\n return (await axios_1.default.get(`${url}/rest/${urlPath}`, {\n params: Object.assign(Object.assign({}, preParams), params),\n })).data;\n}\nfunction formatMusicItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatAlbumItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatArtistItem(it) {\n return Object.assign(Object.assign({}, it), { avatar: it.artistImageUrl });\n}\nasync function searchMusic(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function searchAlbum(query, page) {\n const data = await httpGet('search2', {\n query,\n albumCount: pageSize,\n albumOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.album;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatAlbumItem)\n };\n}\nasync function searchArtist(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function getAlbumInfo(albumItem) {\n const data = await httpGet('getAlbum', {\n id: albumItem.id\n });\n return {\n isEnd: true,\n data: data['subsonic-response'].album.song.map(formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"Navidrome\",\n version: \"0.0.0\",\n author: '\u732b\u5934\u732b',\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/navidrome/index.js\",\n cacheControl: \"no-cache\",\n userVariables: [\n {\n key: \"url\",\n name: \"\u670d\u52a1\u5668\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n },\n ],\n supportedSearchType: [\"music\", \"album\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n async getMediaSource(musicItem) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const urlObj = new URL(`${url}/rest/stream`);\n urlObj.searchParams.append('u', username);\n urlObj.searchParams.append('s', salt);\n urlObj.searchParams.append('t', CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex));\n urlObj.searchParams.append('c', 'MusicFree');\n urlObj.searchParams.append('v', '1.14.1');\n urlObj.searchParams.append('f', 'json');\n urlObj.searchParams.append('id', musicItem.id);\n return {\n url: urlObj.toString()\n };\n }\n};", "id": "msg_1789563363153"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Navidrome, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563363153: True [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Navidrome [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:56:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Youtube", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: item.videoId,\n title: (_b = (_a = item.title.runs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text,\n artist: (_d = (_c = item.ownerText.runs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text,\n artwork: (_g = (_f = (_e = item === null || item === void 0 ? void 0 : item.thumbnail) === null || _e === void 0 ? void 0 : _e.thumbnails) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.url,\n };\n}\nlet lastQuery;\nlet musicContinToken;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n musicContinToken = undefined;\n }\n lastQuery = query;\n let data = JSON.stringify({\n context: {\n client: {\n hl: \"zh-CN\",\n gl: \"US\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0,gzip(gfe)\",\n clientName: \"WEB\",\n clientVersion: \"2.20231121.08.00\",\n osName: \"Windows\",\n osVersion: \"10.0\",\n platform: \"DESKTOP\",\n userInterfaceTheme: \"USER_INTERFACE_THEME_LIGHT\",\n browserName: \"Edge Chromium\",\n browserVersion: \"119.0.0.0\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n screenWidthPoints: 1358,\n screenHeightPoints: 1012,\n screenPixelDensity: 1,\n screenDensityFloat: 1.2395833730697632,\n utcOffsetMinutes: 480,\n memoryTotalKbytes: \"8000000\",\n mainAppWebInfo: {\n pwaInstallabilityStatus: \"PWA_INSTALLABILITY_STATUS_UNKNOWN\",\n webDisplayMode: \"WEB_DISPLAY_MODE_BROWSER\",\n isWebNativeShareAvailable: true,\n },\n timeZone: \"Asia/Shanghai\",\n },\n user: {\n lockedSafetyMode: false,\n },\n request: {\n useSsl: true,\n internalExperimentFlags: [],\n },\n },\n query: musicContinToken ? undefined : query,\n continuation: musicContinToken || undefined,\n });\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/search?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n data: data,\n };\n const response = (await (0, axios_1.default)(config)).data;\n const contents = response.contents.twoColumnSearchResultsRenderer.primaryContents\n .sectionListRenderer.contents;\n const isEndItem = contents.find((it) => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = it.continuationItemRenderer) === null || _a === void 0 ? void 0 : _a.continuationEndpoint) === null || _b === void 0 ? void 0 : _b.continuationCommand) === null || _c === void 0 ? void 0 : _c.request) === \"CONTINUATION_REQUEST_TYPE_SEARCH\";\n });\n if (isEndItem) {\n musicContinToken =\n isEndItem.continuationItemRenderer.continuationEndpoint\n .continuationCommand.token;\n }\n const musicData = contents.find((it) => it.itemSectionRenderer)\n .itemSectionRenderer.contents;\n let resultMusicData = [];\n for (let i = 0; i < musicData.length; ++i) {\n if (musicData[i].videoRenderer) {\n resultMusicData.push(formatMusicItem(musicData[i].videoRenderer));\n }\n }\n return {\n isEnd: !isEndItem,\n data: resultMusicData,\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nlet cacheMediaSource = {\n id: null,\n urls: {},\n};\nfunction getQuality(label) {\n if (label === \"small\") {\n return \"standard\";\n }\n else if (label === \"tiny\") {\n return \"low\";\n }\n else if (label === \"medium\") {\n return \"high\";\n }\n else if (label === \"large\") {\n return \"super\";\n }\n else {\n return \"standard\";\n }\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b;\n if (musicItem.id === cacheMediaSource.id) {\n return {\n url: cacheMediaSource.urls[quality],\n };\n }\n cacheMediaSource = {\n id: null,\n urls: {},\n };\n const data = {\n context: {\n client: {\n screenWidthPoints: 689,\n screenHeightPoints: 963,\n screenPixelDensity: 1,\n utcOffsetMinutes: 120,\n hl: \"en\",\n gl: \"GB\",\n remoteHost: \"1.1.1.1\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"com.google.android.apps.youtube.music/6.14.50 (Linux; U; Android 13; GB) gzip\",\n clientName: \"ANDROID_MUSIC\",\n clientVersion: \"6.14.50\",\n osName: \"Android\",\n osVersion: \"13\",\n originalUrl: \"https://www.youtube.com/tv?is_account_switch=1&hrld=1&fltor=1\",\n theme: \"CLASSIC\",\n platform: \"MOBILE\",\n clientFormFactor: \"UNKNOWN_FORM_FACTOR\",\n webpSupport: false,\n timeZone: \"Europe/Amsterdam\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\",\n },\n user: { enableSafetyMode: false },\n request: {\n internalExperimentFlags: [],\n consistencyTokenJars: [],\n },\n },\n contentCheckOk: true,\n racyCheckOk: true,\n video_id: musicItem.id,\n };\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/player?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n data: JSON.stringify(data),\n };\n const result = (await (0, axios_1.default)(config)).data;\n const formats = (_a = result.streamingData.formats) !== null && _a !== void 0 ? _a : [];\n const adaptiveFormats = (_b = result.streamingData.adaptiveFormats) !== null && _b !== void 0 ? _b : [];\n [...formats, ...adaptiveFormats].forEach((it) => {\n const q = getQuality(it.quality);\n if (q && it.url && !cacheMediaSource.urls[q]) {\n cacheMediaSource.urls[q] = it.url;\n }\n });\n return {\n url: cacheMediaSource.urls[quality],\n };\n}\nmodule.exports = {\n platform: \"Youtube\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/youtube/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789563363454"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Youtube, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563363454: True [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Youtube [2026-09-16 20:56:03] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'status': 'loaded', 'load_time': 1789563330.5954776, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789563330.896697, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'status': 'loaded', 'load_time': 1789563331.1979415, 'enabled': True}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'status': 'loaded', 'load_time': 1789563331.4990466, 'enabled': True}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'status': 'loaded', 'load_time': 1789563331.8001049, 'enabled': True}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'status': 'loaded', 'load_time': 1789563332.1068487, 'enabled': True}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'status': 'loaded', 'load_time': 1789563362.8516078, 'enabled': True}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'status': 'loaded', 'load_time': 1789563363.1527007, 'enabled': True}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'status': 'loaded', 'load_time': 1789563363.4538193, 'enabled': True}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'status': 'loaded', 'load_time': 1789563363.7567713, 'enabled': True}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 20:56:14] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:56:14] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:56:14] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 周杰伦, type: music [2026-09-16 20:56:14] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 20:56:14] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:14] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563374483"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:15] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563374483: True [2026-09-16 20:56:15] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 20:56:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 周杰伦, type: music [2026-09-16 20:56:15] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 20:56:15] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:15] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563375285"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563375285: True [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 16 results [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 周杰伦, type: music [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 20:56:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563376287"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563376287: False [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789563376287'} [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 周杰伦, type: music [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 20:56:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563376490"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563376490: False [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789563376490'} [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 周杰伦, type: music [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 20:56:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563376693"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563376693: False [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789563376693'} [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 周杰伦, type: music [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 20:56:16] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:16] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 20:56:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563376897"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563376897: False [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789563376897'} [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 周杰伦, type: music [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563377101"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563377101: False [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789563377101'} [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 周杰伦, type: music [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 20:56:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563377305"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563377305: False [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789563377305'} [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 周杰伦, type: music [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 20:56:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563377509"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563377509: False [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789563377509'} [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 周杰伦, type: music [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '周杰伦', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5468\u6770\u4f26", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563377713"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563377713: False [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 20:56:17] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789563377713'} [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:17] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 20:56:17] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': '', 'aid': 145879703, 'bvid': '', 'artist': '刘畅的吉他', 'title': '周杰伦歌曲精编吉他指弹教学合集', 'album': '', 'artwork': 'https://archive.biliimg.com/bfs/archive/e52c75c6023e18da9183f4f12d7f81403dc742c2.jpg', 'duration': 0, 'tags': [''], 'date': 'Invalid Date', 'platform': 'bilibili'}, {'id': 'BV1ar4y1C7zq', 'aid': 764007511, 'bvid': 'BV1ar4y1C7zq', 'artist': '周杰伦歌曲全集', 'title': '周杰伦歌曲全集【超清】', 'album': 'BV1ar4y1C7zq', 'artwork': 'http://i0.hdslb.com/bfs/archive/93534c4ba1367f231c9c67636dc5dee186bf8d7c.png', 'duration': 40924, 'tags': ['专辑', 'Jay', '华语MV', '周杰伦歌曲全集', '范特西', '高音质', '合集', '音乐', '完整版', '周杰伦'], 'date': '2021-11-10', 'platform': 'bilibili'}, {'id': '', 'aid': 7072, 'bvid': '', 'artist': '吉他老杨', 'title': '周杰伦《稻香》吉他指弹详细讲解', 'alias': '稻香', 'album': '', 'artwork': 'https://archive.biliimg.com/bfs/archive/a49c778aba9c63eba385b9d4cb9e276532707bda.jpg', 'duration': 0, 'tags': [''], 'date': 'Invalid Date', 'platform': 'bilibili'}, {'id': 'BV1FPjy6TEiE', 'aid': 116779154212963, 'bvid': 'BV1FPjy6TEiE', 'artist': '超级爱下雨天', 'title': '【周杰伦】50首精选合集/后台播放/无损音质/HIFI音质/华语流行音乐才是最叼的', 'album': 'BV1FPjy6TEiE', 'artwork': 'http://i0.hdslb.com/bfs/archive/3acdced5472e3db18d3cf861a8cb414247ebed4d.jpg', 'duration': 13348, 'tags': ['流行音乐', '电台', '周杰伦', '电台新星征集令', 'HIFI音质', '周杰伦金曲', '周杰伦MV', '华语流行', '无损音质'], 'date': '2026-06-20', 'platform': 'bilibili'}, {'id': 'BV1wYYa62Eun', 'aid': 117262086374805, 'bvid': 'BV1wYYa62Eun', 'artist': '音悦收藏家', 'title': '【周杰伦】周杰伦100首精选合集 | 后台播放/无损音质/HIFI音质/华语流行音乐才是最叼', 'album': 'BV1wYYa62Eun', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e8a39d553596370b04821407306c6a5a925960c.jpg', 'duration': 25770, 'tags': ['全能音乐挑战赛', '经典老歌', '车载必听', '宝藏歌单', '精选合集', '流行音乐', '怀旧金曲', '怀旧经典', '无损音质', '周杰伦'], 'date': '2026-09-13', 'platform': 'bilibili'}, {'id': 'BV1oRh56SEVQ', 'aid': 117156205300651, 'bvid': 'BV1oRh56SEVQ', 'artist': '畅听音乐', 'title': '【周杰伦】最热门100首热歌、无损音质、后台播放、每天循环播放', 'album': 'BV1oRh56SEVQ', 'artwork': 'http://i0.hdslb.com/bfs/archive/29f3afe2d4b4a3be5eda5115abc42425fd54ac09.jpg', 'duration': 25779, 'tags': ['电台', 'HIFI音质', '周杰伦', '电台新星征集令', '周杰伦热歌', '周杰伦金曲', 'HiRes', '怀旧老歌', '周杰伦MV', '无损音质'], 'date': '2026-08-27', 'platform': 'bilibili'}, {'id': 'BV15XY36GEjy', 'aid': 117247423028712, 'bvid': 'BV15XY36GEjy', 'artist': '音乐的独奏曲', 'title': '【Hi-Res无损音乐】周杰伦歌曲音乐合集', 'album': 'BV15XY36GEjy', 'artwork': 'http://i2.hdslb.com/bfs/archive/25424634091107d3abaef7aa5dad2040d42e20b7.jpg', 'duration': 45294, 'tags': ['音乐选集', '无损音乐', '夜曲', '音乐合集', '高音质', '周杰伦', 'MV', '音乐', '歌曲'], 'date': '2026-09-12', 'platform': 'bilibili'}, {'id': 'BV1kt7g61EGq', 'aid': 116796904507371, 'bvid': 'BV1kt7g61EGq', 'artist': '如歌如梦', 'title': '【4K Hi-Res】周杰伦无损音质动态歌词合集', 'album': 'BV1kt7g61EGq', 'artwork': 'http://i2.hdslb.com/bfs/archive/e496bde706532774f5d682f6e389d31b3630080c.jpg', 'duration': 44770, 'tags': ['4K', '听歌', '音乐4K计划', '动态歌词', '周杰伦', '音乐', '黑胶唱片', '合集', '无损音质'], 'date': '2026-06-23', 'platform': 'bilibili'}, {'id': 'BV1fx411N7bU', 'aid': 1415480, 'bvid': 'BV1fx411N7bU', 'artist': 'Ta酱-Tatsu', 'title': '【经典】周杰伦全MV 【200P】', 'album': 'BV1fx411N7bU', 'artwork': 'http://i0.hdslb.com/bfs/archive/9238ebe137ccbe36cfd163e6ee0d8be106215f41.jpg', 'duration': 50722, 'tags': ['经典', '23P高能', '一本满足', '写歌小精灵', '分P狂魔', '165P狂魔', '周杰伦', 'JAY'], 'date': '2014-08-14', 'platform': 'bilibili'}, {'id': 'BV1sSY965EeB', 'aid': 117258865086708, 'bvid': 'BV1sSY965EeB', 'artist': '无损音乐合集', 'title': '【无损音质】周杰伦百首歌曲精选 歌词版纯享 地表最高音质 每一首都是顶级文案 中国流行音乐开拓者JAY', 'album': 'BV1sSY965EeB', 'artwork': 'http://i2.hdslb.com/bfs/archive/3a34f8c156957820511dc9ca514dd94eb634a88b.jpg', 'duration': 25452, 'tags': ['歌单', '音乐推荐', '流行音乐', '高音质', '周杰伦', '音乐reaction大赏', '精选歌单', '无损音质', 'JAY', '音乐'], 'date': '2026-09-13', 'platform': 'bilibili'}, {'id': 'BV1um7665EV5', 'aid': 116696325033391, 'bvid': 'BV1um7665EV5', 'artist': '小雨儿音乐铺', 'title': '【周杰伦合集】" 要好好生活,要爱自己 "', 'album': 'BV1um7665EV5', 'artwork': 'http://i1.hdslb.com/bfs/archive/f30967fa5c79724e0b2eb2eadc1cf4887ee6116c.jpg', 'duration': 2389, 'tags': ['电台新星征集令', '歌单', '音乐推荐', '音乐合集', '听歌', '电台', '九宫格音乐', '云听小电视', '日推歌单', '周杰伦合集'], 'date': '2026-06-05', 'platform': 'bilibili'}, {'id': '', 'aid': 596197230, 'bvid': '', 'artist': '梦露piano', 'title': '《那天下雨了》周杰伦-钢琴教程(5级)', 'alias': '那天下雨了', 'album': '', 'artwork': 'https://archive.biliimg.com/bfs/archive/bbf3ab2c463c5a71e741a1c5e91c612094d7ef9f.jpg', 'duration': 0, 'tags': [''], 'date': 'Invalid Date', 'platform': 'bilibili'}, {'id': 'BV1HK4y1D7WP', 'aid': 929472589, 'bvid': 'BV1HK4y1D7WP', 'artist': '_南风以南_', 'title': '【真·4K修复】周杰伦《无与伦比演唱会》大合集', 'alias': '无与伦比演唱会', 'album': 'BV1HK4y1D7WP', 'artwork': 'http://i2.hdslb.com/bfs/archive/558d175d48f441a293ce1efe37fb5fe730a11a6e.jpg', 'duration': 7658, 'tags': ['LIVE', '4K', '无与伦比演唱会', '华语现场', '华语音乐', '周杰伦', '演唱会', 'JAY', '超高清', '4K修复'], 'date': '2021-03-01', 'platform': 'bilibili'}, {'id': 'BV1ZXYf62Ebk', 'aid': 117279232627042, 'bvid': 'BV1ZXYf62Ebk', 'artist': '清影音乐库', 'title': '【华语巅峰周杰伦】周杰伦 100 首精选合集 | 后台播放 / 无损音质 / HIFI 音质 / 周氏金曲百听不厌~', 'album': 'BV1ZXYf62Ebk', 'artwork': 'http://i2.hdslb.com/bfs/archive/caf722b11530aebcae2657e4dcda20d4642b88bb.jpg', 'duration': 25969, 'tags': ['全能音乐挑战赛', '车载必听', '经典老歌', '音乐合集', '怀旧经典', '周杰伦', '音乐选集', '华语金曲', '夜曲', '无损音质'], 'date': '2026-09-16', 'platform': 'bilibili'}, {'id': 'BV1cWDTBmEvt', 'aid': 116345899325544, 'bvid': 'BV1cWDTBmEvt', 'artist': '加加加加塔', 'title': 'Hi-Res无损音质 - 周杰伦音乐合集', 'album': 'BV1cWDTBmEvt', 'artwork': 'http://i0.hdslb.com/bfs/archive/6afadc64283dbb0b61fe323a4c29aee4dbaea350.jpg', 'duration': 7780, 'tags': ['上B站听电台', '华语MV', '周杰伦', 'MV'], 'date': '2026-04-05', 'platform': 'bilibili'}, {'id': 'BV1qFYr6FEbi', 'aid': 117267622795472, 'bvid': 'BV1qFYr6FEbi', 'artist': '准备好了吗要去兜风吗', 'title': '【疑似《那天下雨了》MV】周杰伦vivo最新广告《手握彩虹,遇见晴天》🌈📱', 'alias': '那天下雨了', 'album': 'BV1qFYr6FEbi', 'artwork': 'http://i1.hdslb.com/bfs/archive/e7cc1d92c7a66cdac4b43b3683b0d69a8e20fc46.jpg', 'duration': 147, 'tags': ['科技猎手', '影像旗舰', '开箱', '创意广告', '手机', '周杰伦', '广告', 'jaychou', 'jay', 'VIVO'], 'date': '2026-09-14', 'platform': 'bilibili'}, {'id': 'BV1WGvPzWEeR', 'aid': 115093362709656, 'bvid': 'BV1WGvPzWEeR', 'artist': 'Bobaya6', 'title': '一小时周杰伦音乐合集(精选版)', 'album': 'BV1WGvPzWEeR', 'artwork': 'http://i2.hdslb.com/bfs/archive/d56669d89a015dce486ad167b340742a5fdb904c.jpg', 'duration': 3489, 'tags': ['音乐合集', '周杰伦音乐', '合集', '音乐', '经典', '歌曲', '音乐分享官', '音乐选集', '周杰伦'], 'date': '2025-08-27', 'platform': 'bilibili'}, {'id': 'BV1eC4y1h7NE', 'aid': 796329811, 'bvid': 'BV1eC4y1h7NE', 'artist': 'Summer爱这一夏', 'title': '【醇享音质】【周杰伦】90后中老年收藏曲目36首', 'album': 'BV1eC4y1h7NE', 'artwork': 'http://i0.hdslb.com/bfs/archive/5a0961d63e048a68fe91888f11b25c8effcd89eb.png', 'duration': 9366, 'tags': ['周杰伦', '经典', '90后', '回忆', '精选歌单'], 'date': '2020-07-06', 'platform': 'bilibili'}, {'id': 'BV17mYV6WEe5', 'aid': 117250392591071, 'bvid': 'BV17mYV6WEe5', 'artist': '杰威尔音乐', 'title': '【西西里 | 官方MV 】周杰伦 MV从画面、运镜到剧情铺陈,都以电影规格打造,宛如一部浓缩版的动作电影。', 'album': 'BV17mYV6WEe5', 'artwork': 'http://i1.hdslb.com/bfs/archive/21ee0ef447fd5d41f053194836143dd70e757792.jpg', 'duration': 234, 'tags': ['太陽之子', '华语MV', '西西里', '官方MV', '周杰伦'], 'date': '2026-09-11', 'platform': 'bilibili'}, {'id': 'BV1VFep63EcG', 'aid': 117275457752201, 'bvid': 'BV1VFep63EcG', 'artist': '音悦收藏家', 'title': '【收藏 - 周杰伦】周杰伦100首精选合集 | 后台播放/无损音质/HIFI音质/华语流行音乐才是最叼', 'album': 'BV1VFep63EcG', 'artwork': 'http://i2.hdslb.com/bfs/archive/3546afc2fc039343202d8cbb625d068e174d7e79.jpg', 'duration': 25858, 'tags': ['全能音乐挑战赛', '车载必听', '精选合集', '华语金曲', '8090', '音乐推荐', '夜曲', '怀旧经典', '无损音质', '周杰伦'], 'date': '2026-09-16', 'platform': 'bilibili'}, {'id': 'M07xxAXUFLE', 'title': '【 周杰伦】经典高品质音乐120首 / Jay承包你一整天的音乐时间 / 收藏慢慢听', 'artist': '爱音乐的金鱼姬', 'artwork': 'https://i.ytimg.com/vi/M07xxAXUFLE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDkI-q63887AJnoN5wgzYvyQZu3fA', 'platform': 'Youtube'}, {'id': 'U_qbwdKQQ4Q', 'title': '周杰倫演唱會46首精選Live現場歌曲串燒(Part 1)', 'artist': 'Jacken666', 'artwork': 'https://i.ytimg.com/vi/U_qbwdKQQ4Q/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDT8OCipd9WmYJO3OeDSJra1ZBitg', 'platform': 'Youtube'}, {'id': '9mplI5qEhxk', 'title': '周杰倫歌曲🎧50首精選集🎼【可自選歌曲】【動態滾動歌詞Lyrics】【高音質】Songs of the Most Popular Chinese Singer', 'artist': "大俠人生旅途 Hero's Life Travelling", 'artwork': 'https://i.ytimg.com/vi/9mplI5qEhxk/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLChZ63TML0bK7IPVlLVVvC6Vj4BsA', 'platform': 'Youtube'}, {'id': 'bu7nU9Mhpyo', 'title': '周杰倫 Jay Chou (特別演出: 派偉俊)【告白氣球 Love Confession】Official MV', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/bu7nU9Mhpyo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAVsPYK1OwFMhfk3Z1-3rqzKSjT1A', 'platform': 'Youtube'}, {'id': 'MVD7fhKgGzc', 'title': '周杰倫最好聽的20首歌曲 | 在雨天聽周杰倫-絕佳的選擇 | Listening to Jay Chou on a rainy day - An excellent choice', 'artist': '杰威爾歌詞MV頻道JVR Lyric MV', 'artwork': 'https://i.ytimg.com/vi/MVD7fhKgGzc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBHuHgwFIM4Y2A-PdiyCKQ6_j0CEA', 'platform': 'Youtube'}, {'id': 'L229QDxDakU', 'title': '周杰倫 Jay Chou【一路向北 All the Way North】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/L229QDxDakU/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYZSBWKEQwDw==&rs=AOn4CLAH4awmc2UivuFBYTOZJqJLFpsnYQ', 'platform': 'Youtube'}, {'id': '6Q0Pd53mojY', 'title': '周杰倫 Jay Chou【夜曲 Nocturne】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/6Q0Pd53mojY/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYciBjKD0wDw==&rs=AOn4CLCIjCGrer4v2wKOcmaz_nLwZZ1SdA', 'platform': 'Youtube'}, {'id': '5XK2C9w6oVk', 'title': '周杰倫 Jay Chou【愛在西元前 Love before AD】Official MV', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/5XK2C9w6oVk/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYfyBZKCUwDw==&rs=AOn4CLD0X6yr8seiaeyNnoHGvbmdm2dUWw', 'platform': 'Youtube'}, {'id': 'Bbp9ZaJD_eA', 'title': '周杰倫 Jay Chou【七里香 Orange Jasmine】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/Bbp9ZaJD_eA/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYQCBlKEgwDw==&rs=AOn4CLAxq3Tbad8BgIu8KNcxGlrZPnesyA', 'platform': 'Youtube'}, {'id': 'bX33UI9ZPLk', 'title': '周杰倫 Jay Chou【黑色毛衣 Black Sweater】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/bX33UI9ZPLk/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYZSBlKGUwDw==&rs=AOn4CLDniM708WCbBRvNXR-zlDECGum9Nw', 'platform': 'Youtube'}, {'id': 'SW3OQ0ijUCI', 'title': 'Jay Chou 周杰倫【Gold Rush Town 淘金小鎮】Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/SW3OQ0ijUCI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAk_0OA01oAsxz1KwUtlwpKB-j3MA', 'platform': 'Youtube'}, {'id': 's5Xl5MXboas', 'title': '周杰倫 Jay Chou【蘭亭序 Lan-Ting-Xu】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/s5Xl5MXboas/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYZSBKKEUwDw==&rs=AOn4CLDml2m1SMpCyKZRnPRJOUQOGJ06KQ', 'platform': 'Youtube'}, {'id': 'wt0RKW3aC84', 'title': '周杰倫 Jay Chou【給我一首歌的時間 Give me the Time of One Song】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/wt0RKW3aC84/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYPSBiKGUwDw==&rs=AOn4CLBwIQvS_n1yHg7Em47WFq12SklU_Q', 'platform': 'Youtube'}, {'id': 'sHD_z90ZKV0', 'title': '周杰倫 Jay Chou【稻香 Rice Field】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/sHD_z90ZKV0/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYfyBNKBMwDw==&rs=AOn4CLB5KCGVZ5GVnpHhF0ASALhzT5F2Cg', 'platform': 'Youtube'}, {'id': 'kfXdP7nZIiE', 'title': '周杰倫 Jay Chou【等你下課 Waiting For You (with 楊瑞代 Gary)】歌詞版Lyrics MV', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/kfXdP7nZIiE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAbMN9qjBKpNv21vuWS_WQAIK2UVg', 'platform': 'Youtube'}, {'id': 'wIgduzASI6A', 'title': 'Jay Chou 周杰倫【I Do】Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/wIgduzASI6A/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC2wWf6w2tjheGgjlVsrB10w9raqA', 'platform': 'Youtube'}] [2026-09-16 20:56:34] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 20:56:34] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 20:56:34] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 任素汐, type: music [2026-09-16 20:56:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 20:56:34] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563394515"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563394515: True [2026-09-16 20:56:35] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 20:56:35] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 任素汐, type: music [2026-09-16 20:56:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 20:56:35] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563395117"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563395117: True [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 79 results [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 任素汐, type: music [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 20:56:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563396621"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563396621: False [2026-09-16 20:56:36] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 20:56:36] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789563396621'} [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 任素汐, type: music [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 20:56:36] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 20:56:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563396824"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563396824: False [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789563396824'} [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 任素汐, type: music [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 20:56:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563397027"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563397027: False [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789563397027'} [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 任素汐, type: music [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 20:56:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563397231"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563397231: False [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789563397231'} [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 任素汐, type: music [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563397435"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563397435: False [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789563397435'} [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 任素汐, type: music [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 20:56:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563397640"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563397640: False [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789563397640'} [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 任素汐, type: music [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 20:56:37] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 20:56:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563397844"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:38] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563397844: False [2026-09-16 20:56:38] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:38] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789563397844'} [2026-09-16 20:56:38] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 任素汐, type: music [2026-09-16 20:56:38] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 20:56:38] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 20:56:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789563398048"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 20:56:38] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563398048: False [2026-09-16 20:56:38] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 20:56:38] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789563398048'} [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 20:56:38] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 20:56:38] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': 'bilibili'}, {'id': 'BV1tvbf6sEaA', 'aid': 117126761285646, 'bvid': 'BV1tvbf6sEaA', 'artist': '青屿拾曲', 'title': '任素汐经典歌曲合集|15 首完整曲目沉浸式歌单', 'album': 'BV1tvbf6sEaA', 'artwork': 'http://i1.hdslb.com/bfs/archive/42a414d64c823b79b5e80444a4216066d52a2dc4.jpg', 'duration': 3483, 'tags': ['任素汐', '歌单', '歌曲合集', '经典歌曲', '经典', '合集', '歌曲'], 'date': '2026-08-20', 'platform': 'bilibili'}, {'id': 'BV1DEEizDEdG', 'aid': 114505220624271, 'bvid': 'BV1DEEizDEdG', 'artist': 'JLRS-LeoFM', 'title': '任素汐《亲爱的你啊(《无尽的尽头》主题曲)》百万豪装录音棚大声听', 'alias': '亲爱的你啊(《无尽的尽头', 'album': 'BV1DEEizDEdG', 'artwork': 'http://i1.hdslb.com/bfs/archive/da29507e1a35183d879709c650c9e5f7227712ea.jpg', 'duration': 239, 'tags': ['任素汐', '录音棚', '电台新星征集令', '歌单', '电台', 'Hi-Fi', '电台新星征集令6.0', '音响', 'Hi-res'], 'date': '2025-05-14', 'platform': 'bilibili'}, {'id': 'BV13gYD65Env', 'aid': 117254821777917, 'bvid': 'BV13gYD65Env', 'artist': '吉祥禅音', 'title': '任素汐经典歌曲合集,开口就是故事感,歌声直击内心', 'album': 'BV13gYD65Env', 'artwork': 'http://i2.hdslb.com/bfs/archive/8c674e2b37c4cb53ef0568d28403547b870daf56.jpg', 'duration': 2199, 'tags': ['全能音乐挑战赛', '周传雄', '音乐合集', '经典音乐', '歌曲合集', '经典歌曲', '经典', '怀旧', '治愈', '歌曲'], 'date': '2026-09-12', 'platform': 'bilibili'}, {'id': 'BV149Eq6iESJ', 'aid': 116731020315912, 'bvid': 'BV149Eq6iESJ', 'artist': '夕照影音', 'title': '任素汐《路还好远啊》上线了,自己作词作曲还亲唱,导演真会省钱', 'alias': '路还好远啊', 'album': 'BV149Eq6iESJ', 'artwork': 'http://i0.hdslb.com/bfs/archive/94ebe1ae4ab33a749ce4a838397ef9ede049810a.jpg', 'duration': 145, 'tags': ['MV', '原创', '路还好远啊', '音乐reaction大赏', '任素汐', '新歌'], 'date': '2026-06-11', 'platform': 'bilibili'}, {'id': 'BV1qe1CYBEvT', 'aid': 113263723418680, 'bvid': 'BV1qe1CYBEvT', 'artist': '账号已注销', 'title': '任素汐年轻长得还行啊', 'album': 'BV1qe1CYBEvT', 'artwork': 'http://i0.hdslb.com/bfs/archive/ce8f7f49ab8ae04da4e5b59dd131bf46dae5f2c5.jpg', 'duration': 127, 'tags': ['电影剪辑', '经典电影', '影视剪辑'], 'date': '2024-10-07', 'platform': 'bilibili'}, {'id': 'BV1AK41137HB', 'aid': 500457392, 'bvid': 'BV1AK41137HB', 'artist': '最久music', 'title': '任素汐一首《胡广生》,因唱哭了王菲而走红网络,初闻怎知曲中意', 'alias': '胡广生', 'album': 'BV1AK41137HB', 'artwork': 'http://i1.hdslb.com/bfs/archive/9759e53043e8a0ee05a307d1aea5e67bc281be89.jpg', 'duration': 190, 'tags': ['现实', '任素汐', '催泪', '好听', '打卡挑战', '深情', '走心', '感人', '胡广生', '电影剪辑'], 'date': '2020-12-03', 'platform': 'bilibili'}, {'id': 'VMSvuI2FI5g', 'title': '任素汐〈親愛的你啊〉電視劇《無盡的盡頭》主題曲 Endless Protection OST 【Eng/Pinyin Sub】', 'artist': 'Love OST Music', 'artwork': 'https://i.ytimg.com/vi/VMSvuI2FI5g/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDrqFGcONTexOmUhkAFKcruEszyGQ', 'platform': 'Youtube'}, {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'}, {'id': 'GOtUVPdxFek', 'title': '任素汐 - 亲爱的你啊 (《无尽的尽头》电视剧主题曲)『孤单绕着思念 流淌着的不安,每一步每一晚 踩住了 梦魇。』【动态歌词MV】', 'artist': 'Robin music', 'artwork': 'https://i.ytimg.com/vi/GOtUVPdxFek/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDtx5zrmDIParAh5_FHVeAFd7SxWQ', 'platform': 'Youtube'}, {'id': 'XJxfWqAGrFs', 'title': '任素汐 - 胡廣生 『走走停停不如定定 淒淒切切說句謝謝』【《無名之輩》宣傳推廣曲】', 'artist': '娱乐金曲榜', 'artwork': 'https://i.ytimg.com/vi/XJxfWqAGrFs/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCsOk4jIhn2WQwmkp5QzcCujWIsJw', 'platform': 'Youtube'}, {'id': 'pqLmWzJsdoQ', 'title': '任素汐 - 我要你(電影《驢得水》主題曲)', 'artist': 'Gariber', 'artwork': 'https://i.ytimg.com/vi/pqLmWzJsdoQ/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBVKEgwDw==&rs=AOn4CLDpgm2qWxuvT8XGneac-eNMOVT6Aw', 'platform': 'Youtube'}, {'id': 'TgU_m8eqvlM', 'title': '任素汐 - 親愛的你啊『你會翻過山 看到萬丈晴天,飛鳥正越過海面,你會迎着風 放着膽唱着歌,把風景都看遍。』【動態歌詞MV】', 'artist': '寻音music', 'artwork': 'https://i.ytimg.com/vi/TgU_m8eqvlM/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLButTGiuihhDfh-9ltBSpSCqeazjg', 'platform': 'Youtube'}, {'id': '5Cs0303iKok', 'title': '任素汐《胡广生》是质朴的诉说 也是故事的回响 [精选中文好歌] | 中国音乐电视 Music TV', 'artist': '中国音乐电视 Music TV', 'artwork': 'https://i.ytimg.com/vi/5Cs0303iKok/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB7GYlaH_YENfCyVtkaUbqP5ZOEXQ', 'platform': 'Youtube'}, {'id': 'vV_GdYtXmYg', 'title': '任素汐最经典的歌曲合集', 'artist': '荷塘乐色', 'artwork': 'https://i.ytimg.com/vi/vV_GdYtXmYg/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLABQby11P2Z3AoGDUY9PqTAD2IDlA', 'platform': 'Youtube'}, {'id': 'FidgD0Fo4JA', 'title': '任素汐 - 親愛的你啊【Lyrics Video】「你會翻過山 看到萬丈晴天 飛鳥正越過海面」♪', 'artist': 'Angelic Music World', 'artwork': 'https://i.ytimg.com/vi/FidgD0Fo4JA/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBiNpHkVXROSGSTA46mEPKkPLsmuQ', 'platform': 'Youtube'}, {'id': 'dsXdEwlUY0Y', 'title': '任素汐在春晚的一首《枕着光的她》一开口幸福的画面就浮现在眼前', 'artist': '酷尚音乐', 'artwork': 'https://i.ytimg.com/vi/dsXdEwlUY0Y/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCUoRvlWLo7_Pj3wALirAjiYRPGJQ', 'platform': 'Youtube'}, {'id': '3Cm9MuLhopQ', 'title': '任素汐走心民谣《枕着光的她》唱出心中最温暖的爱情 [2024年春节联欢晚会现场]|騰訊音樂雲頻道', 'artist': '腾讯音乐发行', 'artwork': 'https://i.ytimg.com/vi/3Cm9MuLhopQ/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCOv8DK6jKspkFR6F3NOGPNi5pHIQ', 'platform': 'Youtube'}, {'id': 'Y5zV4PtSxWo', 'title': '任素汐真情演绎 巩俐经典作《归来》赚人热泪《我就是演员》第12期 花絮 20181201 [浙江卫视官方HD]', 'artist': '中国浙江卫视官方频道 Zhejiang STV Official Channel - 欢迎订阅 -', 'artwork': 'https://i.ytimg.com/vi/Y5zV4PtSxWo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCPvAveJBVZuJ45vWg_FTbE-HMLkA', 'platform': 'Youtube'}, {'id': 'X554mT3YxV0', 'title': '任素汐《儿时》 - 歌曲纯享《幻乐之城》PhantaCity【歌手官方音乐频道】', 'artist': '芒果TV音乐 MangoTV Music', 'artwork': 'https://i.ytimg.com/vi/X554mT3YxV0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDmBDiAflsfQWBcoMg9I2oj3xTTig', 'platform': 'Youtube'}, {'id': '9WwACAl8gIw', 'title': '任素汐 - 枕著光的她『等到歲月把皺紋縫成一朵花,他們輓著手把生活過成一幅畫。』【動態歌詞 | Pinyin Lyrics】【PENGUIN MUSIC】', 'artist': 'Pen Q Music', 'artwork': 'https://i.ytimg.com/vi/9WwACAl8gIw/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCq1h-wKrXiebFJfYBUlWNmHClWaw', 'platform': 'Youtube'}, {'id': 'D24-J5MAMC0', 'title': '任素汐 - 本末『三钱换万两,三钱昂扬,万两人仓皇,仓皇闪光。』【动态歌词MV】', 'artist': 'Robin music', 'artwork': 'https://i.ytimg.com/vi/D24-J5MAMC0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCsuVfAVVaojGcyVcFiVaoKpaF9iA', 'platform': 'Youtube'}, {'id': 'tMb6tyVqCwo', 'title': '任素汐到底有多牛,一开口唱哭王菲感动黄渤!#音乐分享', 'artist': '娱音研究所', 'artwork': 'https://i.ytimg.com/vi/tMb6tyVqCwo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCxRqomIyf_43um7Poc3RB8Jxwweg', 'platform': 'Youtube'}, {'id': 'rggANY5s6zM', 'title': '任素汐11岁丧父寄人篱下,一首歌把王菲给整哭了,就连黄渤都强忍泪水!【魔幻音乐秀】#任素汐 #王菲', 'artist': '娱乐转圈圈', 'artwork': 'https://i.ytimg.com/vi/rggANY5s6zM/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBCEMlIkz5kXuuEEwLQkURqB_39yQ', 'platform': 'Youtube'}, {'id': '_fvtXCOLFL8', 'title': '任素汐 - 莫怕莫怕《祝你幸福!》电影情感主题曲「什么最孤单 是我知晓」【🎧AI高质音乐 / 拼音歌词 Lyrics】', 'artist': 'CoolSong Music', 'artwork': 'https://i.ytimg.com/vi/_fvtXCOLFL8/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCqtrjrwFO8qrPJkmcaSnsOwtl4Qw', 'platform': 'Youtube'}, {'id': 'ZEUselC75iw', 'title': '任素汐北京演唱会情深献唱,隔空祝福王菲生日,新歌舞台直击人心引共鸣', 'artist': '兔兔聽音樂', 'artwork': 'https://i.ytimg.com/vi/ZEUselC75iw/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAnsDeySpByn3p3DqMXKkrZ2S33cA', 'platform': 'Youtube'}, {'id': 'oWv2fPdo7-U', 'title': '任素汐&李雪琴&史策&王子璇丨女性成长剧丨一起长大的四个女孩,因人生转折重聚故乡成都,跨越挫折并肩成长丨一口气看完《故乡,别来无恙》全集', 'artist': '壹号电视', 'artwork': 'https://i.ytimg.com/vi/oWv2fPdo7-U/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDkdDvx0z-5ig9smqT5gflhwlYqhQ', 'platform': 'Youtube'}, {'id': 'uQIOo7iiUbA', 'title': '任素汐《草木不言,霧露為衣》 (《月鱗綺紀》網絡劇霧妄言&露蕪衣羈絆曲) 官方動態歌詞版MV |騰訊音樂發行頻道', 'artist': '腾讯音乐发行', 'artwork': 'https://i.ytimg.com/vi/uQIOo7iiUbA/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCFN5YLHjLj4gcP_SNiUpzGeqMXwA', 'platform': 'Youtube'}, {'id': 'AArFwG-ErSk', 'title': '任素汐《王招君》MV,你看花儿多红啊 笑话一般 散落地上 你看世间朗朗有光照 留了树荫送我乘凉!', 'artist': 'Yibo Zhou', 'artwork': 'https://i.ytimg.com/vi/AArFwG-ErSk/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDCiBCWi9CBy_HeolFzNPYWQDfcMw', 'platform': 'Youtube'}, {'id': 'BV1qNTj68EvD', 'aid': 116849836754646, 'bvid': 'BV1qNTj68EvD', 'artist': '乐听乐说', 'title': '在百万豪装录音棚听【任素汐】深圳演唱会全套合集,【Hi-Res无损音质】,可后台播放,沉浸式放松听歌,开车跑步通勤歌单', 'album': 'BV1qNTj68EvD', 'artwork': 'http://i0.hdslb.com/bfs/archive/86356409ca065d25c5a07d220a00cea15cbd4c02.jpg', 'duration': 8297, 'tags': ['全能音乐挑战赛', '歌单', '专辑', '演唱会', '沉浸式听歌', '任素汐', '录音棚', '华语经典', '流行歌曲', '无损音质'], 'date': '2026-07-02', 'platform': 'bilibili'}, {'id': 'BV13a4y1D789', 'aid': 663428497, 'bvid': 'BV13a4y1D789', 'artist': '无损音乐合集', 'title': '【任素汐歌曲合集】你看花儿多红啊', 'album': 'BV13a4y1D789', 'artwork': 'http://i1.hdslb.com/bfs/archive/4b845a635116f4880bcb78be1fcc462c9857c212.png', 'duration': 3828, 'tags': ['歌曲合集', '无损音质', '分集播放', '听歌', '歌单', '合集', '高质量', '任素汐', '歌曲', '好听'], 'date': '2023-11-15', 'platform': 'bilibili'}, {'id': 'BV19K8p6aEtZ', 'aid': 117122718043013, 'bvid': 'BV19K8p6aEtZ', 'artist': 'Galvvvvvvvin', 'title': '【4K全程】任素汐|260815一日即日日Live成都演唱会收官全记录|小歌儿们下次再见', 'album': 'BV19K8p6aEtZ', 'artwork': 'http://i0.hdslb.com/bfs/archive/3b1654732a48086761f33d5750b48624ab63fa24.jpg', 'duration': 7606, 'tags': ['一日即日日Live', '音乐4K计划', '任素汐', '音乐现场', '4K', 'LIVE', '演唱会', '成都演唱会', '全程'], 'date': '2026-08-19', 'platform': 'bilibili'}, {'id': 'BV1Yw411A7Rh', 'aid': 277044963, 'bvid': 'BV1Yw411A7Rh', 'artist': '向日葵99音乐', 'title': '实力派新生代演员~【任素汐】~经典歌曲合集~值得收藏~单曲循环~无损音质', 'album': 'BV1Yw411A7Rh', 'artwork': 'http://i1.hdslb.com/bfs/archive/2627d8174f882ee3da4b412448ae5f1ff964015b.png', 'duration': 2680, 'tags': ['我推的流行音乐', '音乐推荐', '流行音乐', '单曲循环', '听歌向', '音乐', '日推歌单', '音乐综合', '任素汐', '成名曲', '无损音质'], 'date': '2023-10-10', 'platform': 'bilibili'}, {'id': 'BV1fqR7BpEoh', 'aid': 116504746069107, 'bvid': 'BV1fqR7BpEoh', 'artist': '畅听音乐', 'title': '【任素汐】最好听的10首歌曲,无损音质、同步歌词、点击评论区置顶时间能快速切歌哦', 'album': 'BV1fqR7BpEoh', 'artwork': 'http://i2.hdslb.com/bfs/archive/74abbaf2616039e4848c5cf5bf46d20159097081.jpg', 'duration': 2199, 'tags': ['经典老歌', '给场景配上BGM', '任素汐热歌', 'HiRes', '怀旧老歌', '任素汐', '歌曲盘点', '热门歌曲', '高音质', '无损音质'], 'date': '2026-05-02', 'platform': 'bilibili'}, {'id': 'BV1DAitBDEzX', 'aid': 115841945305712, 'bvid': 'BV1DAitBDEzX', 'artist': '音乐罐头厂', 'title': '【任素汐精选合集】来听听影后的灵魂独白,收藏级!', 'album': 'BV1DAitBDEzX', 'artwork': 'http://i1.hdslb.com/bfs/archive/fb4d3a26a1a460490b328e764bc3cd5d058e6477.jpg', 'duration': 2007, 'tags': ['音乐合集', '好听', '宫格音乐', '宝藏音乐', '电台新星征集令', '日推歌单', '精选歌单', '任素汐', '热歌'], 'date': '2026-01-05', 'platform': 'bilibili'}, {'id': 'BV1HV411r7NU', 'aid': 413418126, 'bvid': 'BV1HV411r7NU', 'artist': '未来Y已来', 'title': '喜欢任素汐,飙车!', 'album': 'BV1HV411r7NU', 'artwork': 'http://i1.hdslb.com/bfs/archive/0e28bd90f083ba708048ee0d2ecc73dd799622ad.png', 'duration': 133, 'tags': ['小视频'], 'date': '2020-06-01', 'platform': 'bilibili'}, {'id': 'BV1JUU6Y3Eib', 'aid': 113497346414245, 'bvid': 'BV1JUU6Y3Eib', 'artist': '知己音乐', 'title': '莫怕莫怕 - 任素汐【Hi-Res无损音质】', 'album': 'BV1JUU6Y3Eib', 'artwork': 'http://i2.hdslb.com/bfs/archive/018f53fb247cfd3ca5c88b8078f83ebc0b4fc677.jpg', 'duration': 284, 'tags': ['音乐玩家招募令第六期', '音乐分享官', '无损音质', '任素汐', '经典', '歌词版'], 'date': '2024-11-18', 'platform': 'bilibili'}, {'id': 'BV1PTbS6XEHk', 'aid': 117102836981688, 'bvid': 'BV1PTbS6XEHk', 'artist': 'mayoyo2020', 'title': '【任素汐】好听程度夯中夯!2026.08.15 任素汐·[小歌儿们的live]·成都场全纪录·横版直拍·有字幕版', 'album': 'BV1PTbS6XEHk', 'artwork': 'http://i0.hdslb.com/bfs/archive/dbbbe60adf3a8c31c1ab9216a72edd19384286bb.jpg', 'duration': 7796, 'tags': ['4K', '字幕版', '成都', '亲爱的你啊', '一起来看live', '珍珠珍珠', '横版直拍', '胡广生', '任素汐', '我要你'], 'date': '2026-08-16', 'platform': 'bilibili'}, {'id': 'BV1eCMz6REyQ', 'aid': 117039637205351, 'bvid': 'BV1eCMz6REyQ', 'artist': '吉祥禅音', 'title': '【任素汐】精选任素汐10首热门好听的歌曲,有歌词《亲爱的你啊》《我要你》《胡广生》《王招君》《枕着光的她》《有一点动心》《岁岁》《好》《北方》《莫怕莫怕》', 'alias': '亲爱的你啊', 'album': 'BV1eCMz6REyQ', 'artwork': 'http://i0.hdslb.com/bfs/archive/5c20d4352df65baa85689cc4b8e304499f587707.jpg', 'duration': 2199, 'tags': ['全能音乐挑战赛', '音乐合集', '周传雄', '经典音乐', '歌曲合集', '经典歌曲', '经典', '怀旧', '治愈', '歌曲'], 'date': '2026-08-05', 'platform': 'bilibili'}, {'id': 'BV1dwu6z1EPU', 'aid': 114851837905044, 'bvid': 'BV1dwu6z1EPU', 'artist': '一枚男米', 'title': '被汪苏泷介绍周深和任素汐认识笑死!深深模仿任姐唱歌是有点像的!你俩加个微信吧太尴尬了!夸任姐的歌声很好听', 'album': 'BV1dwu6z1EPU', 'artwork': 'http://i1.hdslb.com/bfs/archive/4ecf49958b0dd46d80002bd60532b282ad4054b7.jpg', 'duration': 113, 'tags': ['汪苏泷', '任素汐', '周深'], 'date': '2025-07-14', 'platform': 'bilibili'}, {'id': 'BV1Jaep6JEB6', 'aid': 117275306824006, 'bvid': 'BV1Jaep6JEB6', 'artist': '黄昏晓live', 'title': '如果生命只是大梦一场,你会怎么办?|任素汐 |大梦 |任素汐成都演唱会', 'album': 'BV1Jaep6JEB6', 'artwork': 'http://i0.hdslb.com/bfs/archive/f2653bdc4e1811d05cc94afa54c520c524e37439.jpg', 'duration': 40, 'tags': ['一起来看live', '任素汐', '大梦', '音乐现场', 'LIVE', '演唱会'], 'date': '2026-09-15', 'platform': 'bilibili'}, {'id': 'BV14VsgzDExf', 'aid': 115403791538840, 'bvid': 'BV14VsgzDExf', 'artist': '音乐的独奏曲', 'title': '【Hi-Res无损音乐】任素汐歌曲音乐合集', 'album': 'BV14VsgzDExf', 'artwork': 'http://i1.hdslb.com/bfs/archive/081f281082f42de2ef63dc0f3c94289008bc531a.jpg', 'duration': 5453, 'tags': ['Hi-Res', '无损音乐', '无损音质', '歌曲', '任素汐', 'hifi音乐', '音乐', '中国音乐', '民谣'], 'date': '2025-10-20', 'platform': 'bilibili'}, {'id': 'chJ-AXRjC7o', 'title': '【任素汐】一次性听完#任素汐 2026深圳演唱会歌单合集', 'artist': 'Bret Silver CCY', 'artwork': 'https://i.ytimg.com/vi/chJ-AXRjC7o/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAlQ900PZsNGN9h-mo6fU2EE2z1ew', 'platform': 'Youtube'}, {'id': '_CCx3mXG6RE', 'title': '把王菲弄哭的任素汐,自己作词作曲演唱《王招君》,不炫技太走心', 'artist': 'EDM Music One Hour', 'artwork': 'https://i.ytimg.com/vi/_CCx3mXG6RE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCHynYXsiWEOoK9q0l6SYifMFyXng', 'platform': 'Youtube'}, {'id': 'Bmv0GrwAHqc', 'title': '20260628任素汐 一日即日日 演唱会深圳站Ren Suxi\'s "One Day, One Day" Concert, Shenzhen Station, June 28, 2026', 'artist': 'HappyKate', 'artwork': 'https://i.ytimg.com/vi/Bmv0GrwAHqc/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYPCBXKHIwDw==&rs=AOn4CLC0wvVDqpT2LIigFo6cqhriVYJj5A', 'platform': 'Youtube'}, {'id': 'mrBFVtVS69k', 'title': '听任素汐 毛不易合唱《别来无恙》 愿你我都被世界温柔以待 「2026央视春晚」| CCTV春晚', 'artist': 'CCTV春晚', 'artwork': 'https://i.ytimg.com/vi/mrBFVtVS69k/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCVkYHoujHH3hP0HxX-ZR5m1F7CDA', 'platform': 'Youtube'}, {'id': '9E428XPIi_k', 'title': '瓦依那X任素汐《大梦》 一首歌唱尽人的一生 #乐队的夏天3 EP7 | The Big Band S3 | #music #live', 'artist': 'iQIYI 奇艺音悦台 - Get the iQIYI APP', 'artwork': 'https://i.ytimg.com/vi/9E428XPIi_k/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA_3P0Tn9I1KsFu7v0W1f31Ti8R_g', 'platform': 'Youtube'}, {'id': 'Qsbm1iXoEwM', 'title': '『合集』任素汐OST經典歌曲串燒『Ren su xi OST Jing dian ge qu chuan shao 』', 'artist': 'Dreamer Music', 'artwork': 'https://i.ytimg.com/vi/Qsbm1iXoEwM/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDjfFr6goTp8hg64tJYeuHnb75L8w', 'platform': 'Youtube'}, {'id': 'LJiQGgOtn78', 'title': '《故乡,别来无恙》重逢曲《岁岁》MV,任素汐作词作曲温暖献唱丨任素汐 李雪琴 史策 王子璇 There Will Be Ample Time【捷成华视偶像剧场】', 'artist': '捷成华视—偶像剧场 Idol & Romance', 'artwork': 'https://i.ytimg.com/vi/LJiQGgOtn78/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAB3dotg7TSNqmRCMxMHw2CFTlGag', 'platform': 'Youtube'}, {'id': '6qRRdOvzbRg', 'title': '杨恩又 任素汐用一首《儿时 Childhood》拉我回童年 「2023央视秋晚」', 'artist': 'CCTV春晚', 'artwork': 'https://i.ytimg.com/vi/6qRRdOvzbRg/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBaBaVw8Uf8M72deNBMGNZAD6vMbg', 'platform': 'Youtube'}, {'id': 'EVEgwFnWhSM', 'title': '瓦依那X任素汐《大梦》 一首歌唱尽人的一生 | 乐队的夏天3 EP7纯享 | The Big Band S3 | iQIYI精选', 'artist': 'iQIYI 潮综艺 - Get the iQIYI APP', 'artwork': 'https://i.ytimg.com/vi/EVEgwFnWhSM/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA5GWkTwsMHtpWe9Dgy_UdHcj4v6w', 'platform': 'Youtube'}, {'id': 'FDVC22FecKk', 'title': '胡廣生 - 任素汐 - 『超高无损音質』【動態歌詞Lyrics】 - 4K畫質', 'artist': 'POP MusicChannel', 'artwork': 'https://i.ytimg.com/vi/FDVC22FecKk/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBTLAn2r7w3J8nVnadhyDS00yhL1A', 'platform': 'Youtube'}, {'id': '03gn9EKRjdI', 'title': "Happy mother's Day | 母亲节,用歌声向她传达爱 | 任素汐《枕着光的她》官方动态歌词版MV [4K 60HZ超高清画质]|騰訊音樂雲頻道", 'artist': '腾讯音乐发行', 'artwork': 'https://i.ytimg.com/vi/03gn9EKRjdI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCoFhnElFGxMZVPX0SEm3EGxpdTaQ', 'platform': 'Youtube'}, {'id': 'x3HOyh7SrcA', 'title': '【任素汐】《亲爱的你啊》2026深圳演唱会 #任素汐', 'artist': 'Bret Silver CCY', 'artwork': 'https://i.ytimg.com/vi/x3HOyh7SrcA/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB8Tl76p9IJBBQlMPoXSvUIiNX-jw', 'platform': 'Youtube'}, {'id': '7Up38RNXX8A', 'title': '本末 - 任素汐『Ben mo - Ren su xi』', 'artist': 'Dreamer Music', 'artwork': 'https://i.ytimg.com/vi/7Up38RNXX8A/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCDU9aKbwSZ06sSs_nTVmdef9NJKQ', 'platform': 'Youtube'}, {'id': 'sG9EW54jx8Y', 'title': '張仙語三 - 任素汐『Zhang xian yu san - Ren su xi』', 'artist': 'Dreamer Music', 'artwork': 'https://i.ytimg.com/vi/sG9EW54jx8Y/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLARPNhkCScceOq3OSvzvqp43EcNzQ', 'platform': 'Youtube'}, {'id': 'GQVtJ_hHatk', 'title': '歲歲(電視劇《故鄉,別來無恙》重逢曲)-任素汐『那天夕陽透過枝椏掃射我 ,影子重疊你追我趕笑聲癲 』【動態歌詞Lyrics】', 'artist': 'Treasure Music', 'artwork': 'https://i.ytimg.com/vi/GQVtJ_hHatk/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD_EOgb_KwXG5zJ5pFgQide07scGg', 'platform': 'Youtube'}, {'id': 'iL9afYWrjCI', 'title': '張仙語三 - 任素汐『張三問天張三捂臉』【動態歌詞MV】', 'artist': 'AH MUSIC', 'artwork': 'https://i.ytimg.com/vi/iL9afYWrjCI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD7Kslt6lFygHNacZcfSDnJCc8DqQ', 'platform': 'Youtube'}, {'id': '7NzIaVUFYgQ', 'title': '《迷墙》Wonder Wall EP01|窝囊夫妻爆改穷酸命|郭京飞、任素汐|MULTI SUB', 'artist': '腾讯视频 - Get the WeTV APP', 'artwork': 'https://i.ytimg.com/vi/7NzIaVUFYgQ/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCjM-BT6IuEz5I7SlgMdFtzHL0hOg', 'platform': 'Youtube'}, {'id': 'Fk7JKxE_sZ4', 'title': '泪目了!任素汐翻唱《再见青春》太走心,一个被演戏耽误的歌手', 'artist': 'EDM Music One Hour', 'artwork': 'https://i.ytimg.com/vi/Fk7JKxE_sZ4/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYWSBlKGQwDw==&rs=AOn4CLCnW1mXuJvoToeFSMOYXKEn9qaRmA', 'platform': 'Youtube'}, {'id': 'Nf10Qs8icHs', 'title': '【任素汐】《一生何求》2026深圳演唱会 #任素汐', 'artist': 'Bret Silver CCY', 'artwork': 'https://i.ytimg.com/vi/Nf10Qs8icHs/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCCUfT8VjLPWL4iaXfnc64hyjPnWA', 'platform': 'Youtube'}, {'id': '_hFLntEAJQE', 'title': 'ENG SUB【无尽的尽头 Endless Protection】EP01 三少年霸凌同学致死!(任素汐、高伟光、刘琳)', 'artist': '腾讯视频 - Get the WeTV APP', 'artwork': 'https://i.ytimg.com/vi/_hFLntEAJQE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAPn5LjVVryS3_-vFbrOM1C4Thu2g', 'platform': 'Youtube'}, {'id': '6j7K9-XPtzs', 'title': '【FULL】飒气女警任素汐首战封神,王骁深陷困局竟被威胁?毒案初露端倪,平静县城下竟藏惊天秘密?🚨| 除恶 EP01 THE DEVIL BETWEEN US | 爱奇艺华语剧场', 'artist': '爱奇艺华语剧场 - Get the iQIYI APP', 'artwork': 'https://i.ytimg.com/vi/6j7K9-XPtzs/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAi0tjAT1FQLcD8QqS4FxH3Da-F0w', 'platform': 'Youtube'}, {'id': 'nw5BqEL_HLs', 'title': '大梦 書法字幕《大夢》-瓦依那·任素汐(Live)', 'artist': '元甫書畫之旅', 'artwork': 'https://i.ytimg.com/vi/nw5BqEL_HLs/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAnDiXlYxEsqNLZbEGWsHvUm1cK1w', 'platform': 'Youtube'}, {'id': 'vqdWJ3xLjYU', 'title': '【任素汐】《岁岁》2026深圳演唱会 #任素汐', 'artist': 'Bret Silver CCY', 'artwork': 'https://i.ytimg.com/vi/vqdWJ3xLjYU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB4vLHDWjT_is8YB56QLlpz5sXOMQ', 'platform': 'Youtube'}, {'id': '16mw3PC_0M0', 'title': '【悬疑电影】《通往春天的列车/A Road To Spring》(任素汐、李岷城主演)', 'artist': '唐阁影院 Tag Theatre', 'artwork': 'https://i.ytimg.com/vi/16mw3PC_0M0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC9EG_B9XtPSAaDBpDtwiR8lO20gA', 'platform': 'Youtube'}, {'id': 'kFRyQtKtUXk', 'title': '困(影視劇《時差一萬公里》主題曲) - 任素汐 羅晉『Kun(Ying shi ju《Shi cha yi wan gong li》Zhu ti qu) - Ren su xi Luo jin』', 'artist': 'Dreamer Music', 'artwork': 'https://i.ytimg.com/vi/kFRyQtKtUXk/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDg35AOO_KRt1eQTbs0qTn_seUJXw', 'platform': 'Youtube'}, {'id': 'AnRCVrwIuaY', 'title': '【FULL】毒祸伪装渗透💉任素汐王骁抵达人性战场💥善恶棋局步步惊心!| 除恶 EP01 THEDEVILBETWEENUS | iQIYI悬疑社', 'artist': 'iQIYI 悬疑社 - Get the iQIYI APP', 'artwork': 'https://i.ytimg.com/vi/AnRCVrwIuaY/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAv0CPgpolMlae2g3ofUjL79g9sMg', 'platform': 'Youtube'}, {'id': 'dV-cAJj0olE', 'title': '『合集』任素汐熱門串燒歌曲#任素汐 #演唱會 #音樂', 'artist': 'AH MUSIC', 'artwork': 'https://i.ytimg.com/vi/dV-cAJj0olE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCsjq4mfXxT-U6GMNeyNJzlHbHEcQ', 'platform': 'Youtube'}, {'id': 'Fj_DA5elIuc', 'title': '天后王菲当场红了眼眶!任素汐一首《儿时》,唱哭了多少人的童年?|音乐剧之城#任素汐#王菲', 'artist': '开心放映室', 'artwork': 'https://i.ytimg.com/vi/Fj_DA5elIuc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBEwwujJS2Jeiugl2TkdRK5gi6BTA', 'platform': 'Youtube'}, {'id': 'fFx6yjt0tks', 'title': '終于等到任素汐《兒時》完整版,唱出80后的童年回憶,好聽又感人', 'artist': '夕照影音', 'artwork': 'https://i.ytimg.com/vi/fFx6yjt0tks/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDN5YnS97UJfAYQKDMmnBaGdCE_-Q', 'platform': 'Youtube'}, {'id': 'EWXb0Ti-WVc', 'title': '【2026东方卫视跨年】#任素汐 献唱《我要你》浪漫气息弥漫全场!#东方卫视跨年 clip clip', 'artist': 'SMG音乐频道', 'artwork': 'https://i.ytimg.com/vi/EWXb0Ti-WVc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBGeGoiICLw2fmzXmgHDv-IX7LJLw', 'platform': 'Youtube'}, {'id': 'l2eGeB-Yz3c', 'title': '#任素汐 直女发言:你们的粉怎么这么厚?!? 抱怨没有感情戏被#李雪琴 一句话驳回 #毛雪汪 Mao Xue Woof', 'artist': '一起看综艺', 'artwork': 'https://i.ytimg.com/vi/l2eGeB-Yz3c/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAXDRMxG7w_qPPE3q8EGayH8T6vMg', 'platform': 'Youtube'}, {'id': 'Cu_cBYuhhK0', 'title': '【2026东方卫视跨年】#任素汐 一开口电影感有了!深情演绎《我要你》,用声线勾勒出缱绻入骨的浪漫,每一句歌词都像冬日里的暖光,唱出心底最柔软的浪漫 #东方卫视跨年盛典 2026 CLIP', 'artist': '中国东方卫视官方频道China DragonTV Official', 'artwork': 'https://i.ytimg.com/vi/Cu_cBYuhhK0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCHG_r5fzzIzgyNhJyUk4w8kcOinw', 'platform': 'Youtube'}, {'id': '1zZZM1rHdD4', 'title': '王招君 (妳看妳拉住我的模樣) - 任素汐『妳看世間朗朗有光照,留了樹蔭送我乘涼』【動態歌詞】', 'artist': 'Dreamer Music', 'artwork': 'https://i.ytimg.com/vi/1zZZM1rHdD4/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCGNIGiXyyvoXHd67eQHRbPMLyZ6A', 'platform': 'Youtube'}, {'id': 'PcwQxUmU9FY', 'title': 'MULTI SUB【时差一万公里 Back To The Origin】EP01 罗晋任素汐新剧精装朋友圈毛坯人生', 'artist': '芒果TV青春剧场 MangoTV Drama', 'artwork': 'https://i.ytimg.com/vi/PcwQxUmU9FY/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA9emXCbdh5gjeFaeHB006EtVz9lw', 'platform': 'Youtube'}, {'id': 'FYcqCiANlwM', 'title': '專訪:電影《有一點動心》主演言承旭 任素汐', 'artist': 'KS Lee', 'artwork': 'https://i.ytimg.com/vi/FYcqCiANlwM/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4OgAK4CIoCDAgAEAEYZSBOKEwwDw==&rs=AOn4CLBUc1URVb-lXKlpvQMrgAVurPhJIw', 'platform': 'Youtube'}, {'id': 'W_kIRc8_sB8', 'title': '世上沒有後悔藥,下半身“貪婪”的任素汐近況曝光,終究遭到反噬#任素汐', 'artist': '星闻野生派', 'artwork': 'https://i.ytimg.com/vi/W_kIRc8_sB8/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDl8j3thofK-xryMkWkRp3gsaQgUQ', 'platform': 'Youtube'}, {'id': 'K8uQ-B7sYd4', 'title': '『影視混剪』困 - 任素汐|電視劇《時差一萬公里》【動態歌詞】', 'artist': 'Dreamer Music', 'artwork': 'https://i.ytimg.com/vi/K8uQ-B7sYd4/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAKDb3Ih6Dh7PUVPLBEtH50JZuPgw', 'platform': 'Youtube'}, {'id': 'o1kOfpS6XXc', 'title': '左小青VS任素汐《1942》徐峥支持任素汐被吴秀波拆台 小演员哭戏堪比专业 《我就是演员》第1期 表演片段 20180908 [浙江卫视官方HD]', 'artist': '中国浙江卫视官方频道 Zhejiang STV Official Channel - 欢迎订阅 -', 'artwork': 'https://i.ytimg.com/vi/o1kOfpS6XXc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBXiJTjCDtCvFDou06LtFYPVEOr5w', 'platform': 'Youtube'}, {'id': 'ZhmyX6WmsKI', 'title': '第34集 宝藏歌手任素汐好听的歌曲#任素汐', 'artist': '音乐之旅Music Journey', 'artwork': 'https://i.ytimg.com/vi/ZhmyX6WmsKI/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4AdQGgALgA4oCDAgAEAEYfyA-KDMwDw==&rs=AOn4CLBzjczhW5onxFH3tNaG-kFmvDgKEA', 'platform': 'Youtube'}, {'id': '0scomR_DrOY', 'title': '【秦昊任素汐新手父母上线】亲爱的小孩EP01 | 任素汐诞下女婴 秦昊把孩子胎盘送给亲妈 | 爱奇艺华语剧场', 'artist': '爱奇艺华语剧场 - Get the iQIYI APP', 'artwork': 'https://i.ytimg.com/vi/0scomR_DrOY/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBwjxppW6tR5WI2YlRyb0tLyCdtkw', 'platform': 'Youtube'}, {'id': '9_VcPjW4yc4', 'title': '【悲傷逆流成河】任素汐 - 再見青春 電影《悲傷逆流成河》插曲♬♫動態歌詞MV【高音質完整版】(2018)', 'artist': 'Daily Lyrics', 'artwork': 'https://i.ytimg.com/vi/9_VcPjW4yc4/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCDpiXTHKn0QObTKXeyjSwPjULMqw', 'platform': 'Youtube'}, {'id': '3vfRqmZqj5o', 'title': '【未播】任素汐毛不易合唱《王招君》 王子璇变“迷妹”星星眼! |《毛雪汪》Mao Xue Woof EP55 BTS', 'artist': '腾讯热播综艺 - Get the WeTV APP', 'artwork': 'https://i.ytimg.com/vi/3vfRqmZqj5o/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCBETtk7fmu-7HNonhKoXO-RZIBgA', 'platform': 'Youtube'}, {'id': 'SBQlS_U4lls', 'title': '別松手啊 我最好的傻瓜- 任素汐『bie song shou a wo zui hao de sha gua - ren su xi』', 'artist': 'MELON MUSIC', 'artwork': 'https://i.ytimg.com/vi/SBQlS_U4lls/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCQnPTDdJZ564xzAcD37OM6TIKQag', 'platform': 'Youtube'}, {'id': 'OkEuBNPJMeI', 'title': '結婚兩年出軌一年,離婚10年仍單身,任素汐的現狀,印證王菲評價 #任素汐 #rensuxi #rensuxi任素汐', 'artist': '中国内地女明星1985', 'artwork': 'https://i.ytimg.com/vi/OkEuBNPJMeI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBkS5OnI-onyD3LPD-tpHPlHyL3yQ', 'platform': 'Youtube'}, {'id': 'moktuYO7cXY', 'title': '困(影視劇《時差一萬公里》主題曲) - 任素汐『Kun(Ying shi ju《Shi cha yi wan gong li》Zhu ti qu) - Ren su xi』', 'artist': 'SKY Music Channel', 'artwork': 'https://i.ytimg.com/vi/moktuYO7cXY/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBk-apJ0YEbZGglZmhLIDFsmnD3qQ', 'platform': 'Youtube'}, {'id': 'CPy2wZY0tPU', 'title': '李光洁 任素汐《别送我》 - 歌曲纯享《幻乐之城》PhantaCity【歌手官方音乐频道】', 'artist': '芒果TV音乐 MangoTV Music', 'artwork': 'https://i.ytimg.com/vi/CPy2wZY0tPU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDPgxkKrH-sF2EmPLJ0vJR62XvHAg', 'platform': 'Youtube'}, {'id': 'dKtC9K1O8N0', 'title': '胡广生(《无名之辈》电影宣传推广曲)', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/dKtC9K1O8N0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDSkawrtFxxKF1KE34Mjmk9Uqa6Dg', 'platform': 'Youtube'}, {'id': 'LOaUAqrmGLw', 'title': '我要你', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/LOaUAqrmGLw/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCfdNEy63EwT_UNBVY5deeZYUXU7w', 'platform': 'Youtube'}, {'id': '4vp8zdGBoIA', 'title': '本末', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/4vp8zdGBoIA/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD9LcyrWYU_M5L1CtVf6isRdlPawg', 'platform': 'Youtube'}, {'id': 'XOg6RnCDiKA', 'title': '张仙语三', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/XOg6RnCDiKA/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBDuJTOJKbvkBgBhG9llcrU1sXQaQ', 'platform': 'Youtube'}, {'id': 'qeVgZNiPp2I', 'title': '歲歲(電視劇《故鄉,別來無恙》重逢曲)', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/qeVgZNiPp2I/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC7pThCR2uTHw56VsDjk1aGq1HAYw', 'platform': 'Youtube'}, {'id': 'QnHi9SiwSMM', 'title': '困(影视剧《时差一万公里》主题曲)', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/QnHi9SiwSMM/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDY2wGHFLORqt7Xd0ZzVDzNEuUsnw', 'platform': 'Youtube'}, {'id': 'BNkaDHZiuko', 'title': '别来无恙', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/BNkaDHZiuko/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBIsh_Ip28NmK-Y_CkS4DCuXifslg', 'platform': 'Youtube'}, {'id': 'hgrZUZHl8cQ', 'title': '困(影视剧《时差一万公里》主题曲)', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/hgrZUZHl8cQ/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBbskaJZn4BBrWIUuwf_fZzP1SONA', 'platform': 'Youtube'}, {'id': '3E7Y6xLX5qQ', 'title': '大儿歌(电视剧《故乡,别来无恙》挥别曲)', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/3E7Y6xLX5qQ/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDMEqJTUffD5yMQIUseaqzH0t1RZw', 'platform': 'Youtube'}, {'id': 'NnWJr8Mu0tw', 'title': '别松手啊 我最好的傻瓜(电视剧《以美之名》主题曲/片头曲)', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/NnWJr8Mu0tw/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDv3kguLziWmoP6OfMsDjknCPEyoQ', 'platform': 'Youtube'}, {'id': 'Iiqd9EJRB2I', 'title': '亲爱的你啊(电视剧《无尽的尽头》主题曲) (合唱版)', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/Iiqd9EJRB2I/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBx8SElQyaepPyHMxnTQnGubcaAGA', 'platform': 'Youtube'}] [2026-09-16 20:56:54] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 20:56:54] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 20:56:54] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 20:56:54] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 20:56:54] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 全部 [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 全部 [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=Qw4sceba3xw [2026-09-16 20:56:54] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=Qw4sceba3xw [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 20:56:54] [0.6.1] [INFO] file.py:1142: [proxy:8f8666e8] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 20:56:54] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 20:56:54] [0.6.1] [INFO] file.py:1145: [proxy:8f8666e8] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 20:56:54] [0.6.1] [INFO] file.py:1173: [proxy:8f8666e8] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 20:56:54] [0.6.1] [INFO] file.py:1219: [proxy:8f8666e8] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 20:56:54] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 20:56:54] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:54] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789563414444"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:54] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563414444: False [2026-09-16 20:56:54] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:54] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:54] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:54] [0.6.1] [INFO] file.py:1267: [proxy:8f8666e8] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 20:56:54] [0.6.1] [ERROR] file.py:1382: [proxy:8f8666e8] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 20:56:54] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 20:56:54] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 20:56:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=dYsp5pN2rAk [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=dYsp5pN2rAk [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1142: [proxy:29329c08] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1145: [proxy:29329c08] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1173: [proxy:29329c08] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1219: [proxy:29329c08] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 20:56:55] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 20:56:55] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:55] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789563415200"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:55] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563415200: False [2026-09-16 20:56:55] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:55] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:55] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1267: [proxy:29329c08] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 20:56:55] [0.6.1] [ERROR] file.py:1382: [proxy:29329c08] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 20:56:55] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 20:56:55] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 20:56:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=DqJ4wI8-oag [2026-09-16 20:56:55] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=DqJ4wI8-oag [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1142: [proxy:722120a4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 20:56:55] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1145: [proxy:722120a4] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1173: [proxy:722120a4] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 20:56:55] [0.6.1] [INFO] file.py:1219: [proxy:722120a4] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 20:56:55] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 20:56:55] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:55] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789563415953"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563415953: False [2026-09-16 20:56:56] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:56] [0.6.1] [INFO] file.py:1267: [proxy:722120a4] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 20:56:56] [0.6.1] [ERROR] file.py:1382: [proxy:722120a4] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 20:56:56] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 20:56:56] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 20:56:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 20:56:56] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:56] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:56] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 20:56:56] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 20:56:56] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=fe6rK6Ob3Wg [2026-09-16 20:56:56] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=fe6rK6Ob3Wg [2026-09-16 20:56:56] [0.6.1] [INFO] file.py:1142: [proxy:0774aaca] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 20:56:56] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 20:56:56] [0.6.1] [INFO] file.py:1145: [proxy:0774aaca] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 20:56:56] [0.6.1] [INFO] file.py:1173: [proxy:0774aaca] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 20:56:56] [0.6.1] [INFO] file.py:1219: [proxy:0774aaca] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 20:56:56] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 20:56:56] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:56] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789563416706"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563416706: False [2026-09-16 20:56:56] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:56] [0.6.1] [INFO] file.py:1267: [proxy:0774aaca] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 20:56:56] [0.6.1] [ERROR] file.py:1382: [proxy:0774aaca] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 20:56:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:56] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 20:56:56] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 20:56:57] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:57] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:56:57] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 20:56:57] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 20:56:57] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=ZUgh3PCIlJE [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=ZUgh3PCIlJE [2026-09-16 20:56:57] [0.6.1] [INFO] file.py:1142: [proxy:23f984b7] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 20:56:57] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 20:56:57] [0.6.1] [INFO] file.py:1145: [proxy:23f984b7] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 20:56:57] [0.6.1] [INFO] file.py:1173: [proxy:23f984b7] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 20:56:57] [0.6.1] [INFO] file.py:1219: [proxy:23f984b7] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 20:56:57] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 20:56:57] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:57] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789563417461"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:56:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:57] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563417461: False [2026-09-16 20:56:57] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:57] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:57] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 20:56:57] [0.6.1] [INFO] file.py:1267: [proxy:23f984b7] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 20:56:57] [0.6.1] [ERROR] file.py:1382: [proxy:23f984b7] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 20:56:57] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 20:56:57] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 20:56:57] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 20:56:57] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 20:56:57] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 20:56:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 20:56:58] [0.6.1] [INFO] network_utils.py:452: 语音文件生成成功: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 20:56:58] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 20:56:58] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 20:56:58] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 20:56:59] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 20:56:59] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 20:56:59] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 20:56:59] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 20:56:59] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 20:56:59] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 20:56:59] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 20:57:05] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 20:57:05] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 20:57:06] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 20:57:06] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 20:57:06] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 20:57:06] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 20:57:06] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 20:57:08] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 20:57:08] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 20:57:08] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 20:57:08] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789563443091"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563443091: True [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789563443392"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563443392: True [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789563443693"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563443693: True [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 20:57:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789563443995"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563443995: True [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789563444296"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563444296: True [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789563444597"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563444597: True [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 20:57:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u97f3\u60a6\u53f0", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageNum = 20;\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d;\n return {\n id: item.id,\n title: item.title,\n artist: (item === null || item === void 0 ? void 0 : item.allArtistNames) ||\n ((_b = (_a = item.artists) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (s) => s.name).join(\", \")) ||\n ((_c = item.user) === null || _c === void 0 ? void 0 : _c.niceName),\n artwork: item === null || item === void 0 ? void 0 : item.headImg,\n urls: (_d = item === null || item === void 0 ? void 0 : item.fullClip) === null || _d === void 0 ? void 0 : _d.urls,\n };\n}\nfunction formatArtistItem(item) {\n return {\n id: item.id,\n name: item.name,\n avatar: item.headImg,\n };\n}\nlet lastQuery;\nlet lastMusicId;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n lastMusicId = 0;\n }\n lastQuery = query;\n let data = JSON.stringify({\n searchType: \"MV\",\n key: query,\n sinceId: lastMusicId,\n size: pageNum,\n requestTagRows: [\n {\n key: \"sortType\",\n chosenTags: [\"HOTTEST\"],\n },\n {\n key: \"source\",\n chosenTags: [\"-1\"],\n },\n {\n key: \"duration\",\n chosenTags: [\"-1\"],\n },\n ],\n });\n let config = {\n method: \"post\",\n maxBodyLength: Infinity,\n url: \"https://search-api.yinyuetai.com/search/get_search_result.json\",\n headers: {\n referrer: \"https://www.yinyuetai.com/\",\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n wua: \"YYT/1.0.0 (WEB;web;11;zh-CN;kADiV2jNJFy2ryvuyB5Ne)\",\n },\n data: data,\n };\n const response = (await axios_1.default.request(config)).data.data;\n lastMusicId = response[response.length - 1].id;\n return {\n isEnd: pageNum > response.length,\n data: response.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n let url;\n if (quality === \"standard\") {\n url = musicItem.urls.find((it) => it.streamType === 5).url;\n }\n else if (quality === \"high\") {\n url = musicItem.urls.find((it) => it.streamType === 1).url;\n }\n return {\n url,\n };\n}\nmodule.exports = {\n platform: \"\u97f3\u60a6\u53f0\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/yinyuetai/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789563444898"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 20:57:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 音悦台, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 20:57:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 20:57:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563444898: True [2026-09-16 20:57:25] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 音悦台 [2026-09-16 20:57:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 20:57:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 20:57:25] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 20:57:25] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDAV", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst webdav_1 = require(\"webdav\");\nlet cachedData = {};\nfunction getClient() {\n var _a, _b, _c;\n const { url, username, password, searchPath } = (_b = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables) === null || _a === void 0 ? void 0 : _a.call(env)) !== null && _b !== void 0 ? _b : {};\n if (!(url && username && password)) {\n return null;\n }\n if (!(cachedData.url === url &&\n cachedData.username === username &&\n cachedData.password === password &&\n cachedData.searchPath === searchPath)) {\n cachedData.url = url;\n cachedData.username = username;\n cachedData.password = password;\n cachedData.searchPath = searchPath;\n cachedData.searchPathList = (_c = searchPath === null || searchPath === void 0 ? void 0 : searchPath.split) === null || _c === void 0 ? void 0 : _c.call(searchPath, \",\");\n cachedData.cacheFileList = null;\n }\n return (0, webdav_1.createClient)(url, {\n authType: webdav_1.AuthType.Password,\n username,\n password,\n });\n}\nasync function searchMusic(query) {\n var _a, _b;\n const client = getClient();\n if (!cachedData.cacheFileList) {\n const searchPathList = ((_a = cachedData.searchPathList) === null || _a === void 0 ? void 0 : _a.length)\n ? cachedData.searchPathList\n : [\"/\"];\n let result = [];\n for (let search of searchPathList) {\n try {\n const fileItems = (await client.getDirectoryContents(search)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n result = [...result, ...fileItems];\n }\n catch (_c) { }\n }\n cachedData.cacheFileList = result;\n }\n return {\n isEnd: true,\n data: ((_b = cachedData.cacheFileList) !== null && _b !== void 0 ? _b : [])\n .filter((it) => it.basename.includes(query))\n .map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nasync function getTopLists() {\n getClient();\n const data = {\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: (cachedData.searchPathList || []).map((it) => ({\n title: it,\n id: it,\n })),\n };\n return [data];\n}\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n const fileItems = (await client.getDirectoryContents(topListItem.id)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n return {\n musicList: fileItems.map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"\u732b\u5934\u732b\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\",\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n },\n ],\n version: \"0.0.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/webdav/index.js\",\n cacheControl: \"no-cache\",\n search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n },\n getTopLists,\n getTopListDetail,\n getMediaSource(musicItem) {\n const client = getClient();\n return {\n url: client.getFileDownloadLink(musicItem.id),\n };\n },\n};", "id": "msg_1789563446203"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDAV, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563446203: False [2026-09-16 20:57:26] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "bilibili", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"bilibili\",\n appVersion: \">=0.0\",\n version: \"0.2.3\",\n author: \"\u732b\u5934\u732b\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/bilibili/index.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789563446606"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 20:57:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: bilibili, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563446606: True [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: bilibili [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 20:57:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u7f51", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://zh.followlyrics.com/search', {\n params: {\n name: query,\n type: 'song'\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.table.table-striped > tbody');\n const items = results.children('tr');\n const data = items.map((index, el) => {\n const tds = $(el).children();\n const title = $(tds.get(0)).text().trim();\n const artist = $(tds.get(1)).text().trim();\n const album = $(tds.get(2)).text().trim();\n const id = $(tds.get(3)).children('a').attr('href');\n return {\n title,\n artist,\n album,\n id\n };\n }).toArray();\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('div#lyrics').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u7f51\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789563446907"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词网, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563446907: True [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词网 [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Navidrome", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst pageSize = 25;\nasync function httpGet(urlPath, params) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n console.log(userVariables);\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const preParams = {\n u: username,\n s: salt,\n t: CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex),\n c: \"MusicFree\",\n v: \"1.14.1\",\n f: \"json\",\n };\n return (await axios_1.default.get(`${url}/rest/${urlPath}`, {\n params: Object.assign(Object.assign({}, preParams), params),\n })).data;\n}\nfunction formatMusicItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatAlbumItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatArtistItem(it) {\n return Object.assign(Object.assign({}, it), { avatar: it.artistImageUrl });\n}\nasync function searchMusic(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function searchAlbum(query, page) {\n const data = await httpGet('search2', {\n query,\n albumCount: pageSize,\n albumOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.album;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatAlbumItem)\n };\n}\nasync function searchArtist(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function getAlbumInfo(albumItem) {\n const data = await httpGet('getAlbum', {\n id: albumItem.id\n });\n return {\n isEnd: true,\n data: data['subsonic-response'].album.song.map(formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"Navidrome\",\n version: \"0.0.0\",\n author: '\u732b\u5934\u732b',\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/navidrome/index.js\",\n cacheControl: \"no-cache\",\n userVariables: [\n {\n key: \"url\",\n name: \"\u670d\u52a1\u5668\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n },\n ],\n supportedSearchType: [\"music\", \"album\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n async getMediaSource(musicItem) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const urlObj = new URL(`${url}/rest/stream`);\n urlObj.searchParams.append('u', username);\n urlObj.searchParams.append('s', salt);\n urlObj.searchParams.append('t', CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex));\n urlObj.searchParams.append('c', 'MusicFree');\n urlObj.searchParams.append('v', '1.14.1');\n urlObj.searchParams.append('f', 'json');\n urlObj.searchParams.append('id', musicItem.id);\n return {\n url: urlObj.toString()\n };\n }\n};", "id": "msg_1789563447209"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Navidrome, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563447209: True [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Navidrome [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 20:57:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Youtube", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: item.videoId,\n title: (_b = (_a = item.title.runs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text,\n artist: (_d = (_c = item.ownerText.runs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text,\n artwork: (_g = (_f = (_e = item === null || item === void 0 ? void 0 : item.thumbnail) === null || _e === void 0 ? void 0 : _e.thumbnails) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.url,\n };\n}\nlet lastQuery;\nlet musicContinToken;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n musicContinToken = undefined;\n }\n lastQuery = query;\n let data = JSON.stringify({\n context: {\n client: {\n hl: \"zh-CN\",\n gl: \"US\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0,gzip(gfe)\",\n clientName: \"WEB\",\n clientVersion: \"2.20231121.08.00\",\n osName: \"Windows\",\n osVersion: \"10.0\",\n platform: \"DESKTOP\",\n userInterfaceTheme: \"USER_INTERFACE_THEME_LIGHT\",\n browserName: \"Edge Chromium\",\n browserVersion: \"119.0.0.0\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n screenWidthPoints: 1358,\n screenHeightPoints: 1012,\n screenPixelDensity: 1,\n screenDensityFloat: 1.2395833730697632,\n utcOffsetMinutes: 480,\n memoryTotalKbytes: \"8000000\",\n mainAppWebInfo: {\n pwaInstallabilityStatus: \"PWA_INSTALLABILITY_STATUS_UNKNOWN\",\n webDisplayMode: \"WEB_DISPLAY_MODE_BROWSER\",\n isWebNativeShareAvailable: true,\n },\n timeZone: \"Asia/Shanghai\",\n },\n user: {\n lockedSafetyMode: false,\n },\n request: {\n useSsl: true,\n internalExperimentFlags: [],\n },\n },\n query: musicContinToken ? undefined : query,\n continuation: musicContinToken || undefined,\n });\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/search?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n data: data,\n };\n const response = (await (0, axios_1.default)(config)).data;\n const contents = response.contents.twoColumnSearchResultsRenderer.primaryContents\n .sectionListRenderer.contents;\n const isEndItem = contents.find((it) => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = it.continuationItemRenderer) === null || _a === void 0 ? void 0 : _a.continuationEndpoint) === null || _b === void 0 ? void 0 : _b.continuationCommand) === null || _c === void 0 ? void 0 : _c.request) === \"CONTINUATION_REQUEST_TYPE_SEARCH\";\n });\n if (isEndItem) {\n musicContinToken =\n isEndItem.continuationItemRenderer.continuationEndpoint\n .continuationCommand.token;\n }\n const musicData = contents.find((it) => it.itemSectionRenderer)\n .itemSectionRenderer.contents;\n let resultMusicData = [];\n for (let i = 0; i < musicData.length; ++i) {\n if (musicData[i].videoRenderer) {\n resultMusicData.push(formatMusicItem(musicData[i].videoRenderer));\n }\n }\n return {\n isEnd: !isEndItem,\n data: resultMusicData,\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nlet cacheMediaSource = {\n id: null,\n urls: {},\n};\nfunction getQuality(label) {\n if (label === \"small\") {\n return \"standard\";\n }\n else if (label === \"tiny\") {\n return \"low\";\n }\n else if (label === \"medium\") {\n return \"high\";\n }\n else if (label === \"large\") {\n return \"super\";\n }\n else {\n return \"standard\";\n }\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b;\n if (musicItem.id === cacheMediaSource.id) {\n return {\n url: cacheMediaSource.urls[quality],\n };\n }\n cacheMediaSource = {\n id: null,\n urls: {},\n };\n const data = {\n context: {\n client: {\n screenWidthPoints: 689,\n screenHeightPoints: 963,\n screenPixelDensity: 1,\n utcOffsetMinutes: 120,\n hl: \"en\",\n gl: \"GB\",\n remoteHost: \"1.1.1.1\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"com.google.android.apps.youtube.music/6.14.50 (Linux; U; Android 13; GB) gzip\",\n clientName: \"ANDROID_MUSIC\",\n clientVersion: \"6.14.50\",\n osName: \"Android\",\n osVersion: \"13\",\n originalUrl: \"https://www.youtube.com/tv?is_account_switch=1&hrld=1&fltor=1\",\n theme: \"CLASSIC\",\n platform: \"MOBILE\",\n clientFormFactor: \"UNKNOWN_FORM_FACTOR\",\n webpSupport: false,\n timeZone: \"Europe/Amsterdam\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\",\n },\n user: { enableSafetyMode: false },\n request: {\n internalExperimentFlags: [],\n consistencyTokenJars: [],\n },\n },\n contentCheckOk: true,\n racyCheckOk: true,\n video_id: musicItem.id,\n };\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/player?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n data: JSON.stringify(data),\n };\n const result = (await (0, axios_1.default)(config)).data;\n const formats = (_a = result.streamingData.formats) !== null && _a !== void 0 ? _a : [];\n const adaptiveFormats = (_b = result.streamingData.adaptiveFormats) !== null && _b !== void 0 ? _b : [];\n [...formats, ...adaptiveFormats].forEach((it) => {\n const q = getQuality(it.quality);\n if (q && it.url && !cacheMediaSource.urls[q]) {\n cacheMediaSource.urls[q] = it.url;\n }\n });\n return {\n url: cacheMediaSource.urls[quality],\n };\n}\nmodule.exports = {\n platform: \"Youtube\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/youtube/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789563447510"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Youtube, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789563447510: True [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Youtube [2026-09-16 20:57:27] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'status': 'loaded', 'load_time': 1789563443.3920634, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789563443.693553, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'status': 'loaded', 'load_time': 1789563443.994597, 'enabled': True}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'status': 'loaded', 'load_time': 1789563444.295765, 'enabled': True}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'status': 'loaded', 'load_time': 1789563444.5969138, 'enabled': True}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'status': 'loaded', 'load_time': 1789563444.898043, 'enabled': True}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'status': 'loaded', 'load_time': 1789563445.2011356, 'enabled': True}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'status': 'loaded', 'load_time': 1789563446.9075372, 'enabled': True}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'status': 'loaded', 'load_time': 1789563447.2086012, 'enabled': True}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'status': 'loaded', 'load_time': 1789563447.5097826, 'enabled': True}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'status': 'loaded', 'load_time': 1789563447.8108356, 'enabled': True}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:22:16] [0.6.1] [INFO] system.py:132: getsetting device_list: [{'deviceID': '02b2adf4-4fad-42ed-a30f-38072ff7b951', 'serialNumber': '62833/A5X147389', 'name': 'Xiaomi 智能音箱 Pro', 'alias': 'Xiaomi 智能音箱 Pro', 'current': False, 'presence': 'online', 'address': '60.255.127.33', 'miotDID': '2181600216', 'hardware': 'OH2P', 'romVersion': '1.62.2', 'romChannel': 'release', 'capabilities': {'multiroom_music': 1, 'multiroom_miplay': 1, 'content_blacklist': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'user_nick_name': 1, 'night_mode': 1, 'init_wakeup_and_dialogue': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'stereo_mode_v2': 1, 'report_times': 1, 'alarm_volume': 1, 'ai_instruction': 1, 'custom_tts': 1, 'classified_alarm': 1, 'continuous_desc_x10a': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'child_mode': 1, 'night_mode_detail': 1, 'voice_print_multidevice': 1, 'baby_schedule': 1, 'tone_setting': 1, 'earthquake': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'lamp_efficacy': 1, 'xiaomi_voip': 1, 'continuous_dialogue': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'yunduantts': 1, 'answer_tone': 1, 'stereo_mode': 1, 'mico_current': 1, 'soundfx_tuning': 1, 'voip_used_time': 1}, 'remoteCtrlType': '', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkRaOXRXTFNxRnRuL3RmTzJlYUdFeEFHQkplZ0JLWDFxVk5YWXYvUlNKNkF1aVhtd0VvRkZIeHdia2VBL2twbFZEazYrS3FOUXNUdk4yNkpRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjIuMiIsInNpZ24iOiI3OWEyYTk5NjEwZTQ0MTJiZDYyMWYwOGMzODAzNTQzMjNlYWM5NWQxZjRlODQ4NzM5YTNjMDVlZjg1ZTZjNjFlIiwic24iOiI2MjgzMy9BNVgxNDczODkifQ==', 'deviceProfile': 'eyJzaWduIjoiMjFhNjVkNmY2OTAyYWYzMDkwOGU3NmE0YWI0MmRiMjdhOTUzMDNlMmY0MDI1OGQ1MWI3MjI2YjM2N2NjNjRjYiIsImRldmljZUlkIjoiMDJiMmFkZjQtNGZhZC00MmVkLWEzMGYtMzgwNzJmZjdiOTUxIn0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '50:FE:39:F4:2A:38', 'ssid': ''}, {'deviceID': '5e8b23d4-d770-4533-8f45-c5912841dc47', 'serialNumber': '31833/C2WW44286', 'name': '小爱音箱Play增强版', 'alias': '小爱音箱Play增强版', 'current': False, 'presence': 'online', 'address': 'unknown', 'miotDID': '726110455', 'hardware': 'L05C', 'romVersion': '1.68.2', 'romChannel': 'release', 'capabilities': {'content_blacklist': 1, 'lan_tv_control': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'night_mode': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'report_times': 1, 'ai_instruction': 1, 'classified_alarm': 1, 'loadmore_v2': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'night_mode_detail': 1, 'child_mode': 1, 'voice_print_multidevice': 1, 'tone_setting': 1, 'baby_schedule': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'mesh_conflict_check': 1, 'yueyu': 1, 'led_clock': 1, 'yunduantts': 1, 'mico_current': 1}, 'remoteCtrlType': 'miot', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkNIZHN5UkRFREVNUUlFSWRDY2lLUGRHQko5NHJPZmE0ZER4b21PeDlFS2c1WEw2UUVvRkNCN2VER2d4cE1aK1cxWGV5eDVlekJ6ZHJReEpRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjguMiIsInNpZ24iOiIxMWNkY2Y3NGM4ZjY4MGYzZDJkZTk2YTU1YTMxZjU1MzRhZGUxYzVmZDk5M2Q3MTJkNTAyYmI4ZDIwZWFhYTBlIiwic24iOiIzMTgzMy9DMldXNDQyODYifQ==', 'deviceProfile': 'eyJzaWduIjoiOGEzYTNkZWMxYjAxNjRkNjk0NDQ0MWVjMTBlMmM2ZWQ0NTc0NGUxNDE1OTQxMjA4ZTdjYjRhZDljYTYzMTIzOCIsImRldmljZUlkIjoiNWU4YjIzZDQtZDc3MC00NTMzLThmNDUtYzU5MTI4NDFkYzQ3In0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '4C:C6:4C:E4:4B:B8', 'ssid': ''}] [2026-09-16 21:23:18] [0.6.1] [INFO] system.py:132: getsetting device_list: [{'deviceID': '02b2adf4-4fad-42ed-a30f-38072ff7b951', 'serialNumber': '62833/A5X147389', 'name': 'Xiaomi 智能音箱 Pro', 'alias': 'Xiaomi 智能音箱 Pro', 'current': False, 'presence': 'online', 'address': '60.255.127.33', 'miotDID': '2181600216', 'hardware': 'OH2P', 'romVersion': '1.62.2', 'romChannel': 'release', 'capabilities': {'multiroom_music': 1, 'multiroom_miplay': 1, 'content_blacklist': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'user_nick_name': 1, 'night_mode': 1, 'init_wakeup_and_dialogue': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'stereo_mode_v2': 1, 'report_times': 1, 'alarm_volume': 1, 'ai_instruction': 1, 'custom_tts': 1, 'classified_alarm': 1, 'continuous_desc_x10a': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'child_mode': 1, 'night_mode_detail': 1, 'voice_print_multidevice': 1, 'baby_schedule': 1, 'tone_setting': 1, 'earthquake': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'lamp_efficacy': 1, 'xiaomi_voip': 1, 'continuous_dialogue': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'yunduantts': 1, 'answer_tone': 1, 'stereo_mode': 1, 'mico_current': 1, 'soundfx_tuning': 1, 'voip_used_time': 1}, 'remoteCtrlType': '', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkRnM01aY0MxRC9RN0liTkdrU0Y3MUdHQkpBeUFzMStMeFBxYnNFTmxrTy8yUU0wUUVvRktGOURKeFR4SGc2YUZreTArQk5xUFZnVlBFU0pRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjIuMiIsInNpZ24iOiI3OWEyYTk5NjEwZTQ0MTJiZDYyMWYwOGMzODAzNTQzMjNlYWM5NWQxZjRlODQ4NzM5YTNjMDVlZjg1ZTZjNjFlIiwic24iOiI2MjgzMy9BNVgxNDczODkifQ==', 'deviceProfile': 'eyJzaWduIjoiMjFhNjVkNmY2OTAyYWYzMDkwOGU3NmE0YWI0MmRiMjdhOTUzMDNlMmY0MDI1OGQ1MWI3MjI2YjM2N2NjNjRjYiIsImRldmljZUlkIjoiMDJiMmFkZjQtNGZhZC00MmVkLWEzMGYtMzgwNzJmZjdiOTUxIn0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '50:FE:39:F4:2A:38', 'ssid': ''}, {'deviceID': '5e8b23d4-d770-4533-8f45-c5912841dc47', 'serialNumber': '31833/C2WW44286', 'name': '小爱音箱Play增强版', 'alias': '小爱音箱Play增强版', 'current': False, 'presence': 'online', 'address': 'unknown', 'miotDID': '726110455', 'hardware': 'L05C', 'romVersion': '1.68.2', 'romChannel': 'release', 'capabilities': {'content_blacklist': 1, 'lan_tv_control': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'night_mode': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'report_times': 1, 'ai_instruction': 1, 'classified_alarm': 1, 'loadmore_v2': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'night_mode_detail': 1, 'child_mode': 1, 'voice_print_multidevice': 1, 'tone_setting': 1, 'baby_schedule': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'mesh_conflict_check': 1, 'yueyu': 1, 'led_clock': 1, 'yunduantts': 1, 'mico_current': 1}, 'remoteCtrlType': 'miot', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkNKVUJZSU44SkNSL1lsQVc0aE13YXZHQkxjSFFVVzdwSkMvYU5sTXJydzR5ZmYvd0VvRkkyYnQ1cHlJZmN5N2RDWVB1WkxOQVoyeXBBdUpRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjguMiIsInNpZ24iOiIxMWNkY2Y3NGM4ZjY4MGYzZDJkZTk2YTU1YTMxZjU1MzRhZGUxYzVmZDk5M2Q3MTJkNTAyYmI4ZDIwZWFhYTBlIiwic24iOiIzMTgzMy9DMldXNDQyODYifQ==', 'deviceProfile': 'eyJzaWduIjoiOGEzYTNkZWMxYjAxNjRkNjk0NDQ0MWVjMTBlMmM2ZWQ0NTc0NGUxNDE1OTQxMjA4ZTdjYjRhZDljYTYzMTIzOCIsImRldmljZUlkIjoiNWU4YjIzZDQtZDc3MC00NTMzLThmNDUtYzU5MTI4NDFkYzQ3In0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '4C:C6:4C:E4:4B:B8', 'ssid': ''}] [2026-09-16 21:23:33] [0.6.1] [INFO] device.py:77: docmd. did:2181600216 cmd:刷新列表 [2026-09-16 21:23:33] [0.6.1] [INFO] xiaomusic.py:284: cancel_all_tasks no task [2026-09-16 21:23:33] [0.6.1] [INFO] command_handler.py:51: 收到消息:刷新列表 控制面板:True did:2181600216 [2026-09-16 21:23:33] [0.6.1] [INFO] command_handler.py:105: 完全匹配指令. query:刷新列表 opvalue:gen_music_list [2026-09-16 21:23:33] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:23:35] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:23:36] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 68, "loop_type": 1, "media_type": 3, "play_song_detail": { "audio_id": "1674519385930209393", "position": 349, "duration": 30067 }, "track_list": [ "1674519385930209393", "1674517771649551475", "3290871775726928119", "1791472616801830473", "2086467922354504865", "2925859927488463263", "2968693374732731409", "2955838702774911006" ] }'}} [2026-09-16 21:23:36] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:23:36] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:23:36] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:23:36] [0.6.1] [INFO] device_player.py:221: 彻底重新洗牌 全部,并将当前歌曲置顶 [2026-09-16 21:23:36] [0.6.1] [INFO] xiaomusic.py:339: gen_music_list ok [2026-09-16 21:23:36] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:23:36] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:23:36] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:23:36] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:24:26] [0.6.1] [INFO] playlist.py:40: playmusiclist 2181600216 listname:所有歌曲 musicname:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:26] [0.6.1] [INFO] music_library.py:641: 根据【所有歌曲】找到播放列表【所有歌曲】 [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 所有歌曲 [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:1186: 开始播放列表所有歌曲 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 21:24:26] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:26] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:26] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:24:26] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 21:24:26] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=sR0yn0UjTZw [2026-09-16 21:24:26] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=sR0yn0UjTZw [2026-09-16 21:24:26] [0.6.1] [INFO] file.py:1142: [proxy:36e54d40] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 21:24:26] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 21:24:26] [0.6.1] [INFO] file.py:1145: [proxy:36e54d40] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 21:24:26] [0.6.1] [INFO] file.py:1173: [proxy:36e54d40] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:24:26] [0.6.1] [INFO] file.py:1219: [proxy:36e54d40] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:24:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:24:26] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565066709"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:24:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565066709: False [2026-09-16 21:24:27] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:27] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:27] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:27] [0.6.1] [INFO] file.py:1267: [proxy:36e54d40] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 21:24:27] [0.6.1] [ERROR] file.py:1382: [proxy:36e54d40] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:24:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:27] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:24:27] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 所有歌曲 [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 21:24:27] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:27] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:27] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:24:27] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 21:24:27] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=YNrqwS5BbiU [2026-09-16 21:24:27] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=YNrqwS5BbiU [2026-09-16 21:24:27] [0.6.1] [INFO] file.py:1142: [proxy:22a62060] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 21:24:27] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 21:24:27] [0.6.1] [INFO] file.py:1145: [proxy:22a62060] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 21:24:27] [0.6.1] [INFO] file.py:1173: [proxy:22a62060] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:24:27] [0.6.1] [INFO] file.py:1219: [proxy:22a62060] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:24:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:24:27] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565067568"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:24:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565067568: False [2026-09-16 21:24:27] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:27] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:27] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:27] [0.6.1] [INFO] file.py:1267: [proxy:22a62060] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 21:24:27] [0.6.1] [ERROR] file.py:1382: [proxy:22a62060] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:24:27] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:24:27] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:24:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 所有歌曲 [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 21:24:28] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:28] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:28] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:24:28] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 21:24:28] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=eUVo_I0X5Ik [2026-09-16 21:24:28] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=eUVo_I0X5Ik [2026-09-16 21:24:28] [0.6.1] [INFO] file.py:1142: [proxy:fd6a5b10] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 21:24:28] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 21:24:28] [0.6.1] [INFO] file.py:1145: [proxy:fd6a5b10] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 21:24:28] [0.6.1] [INFO] file.py:1173: [proxy:fd6a5b10] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:24:28] [0.6.1] [INFO] file.py:1219: [proxy:fd6a5b10] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:24:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:24:28] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565068319"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:24:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:28] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565068319: False [2026-09-16 21:24:28] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:28] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:28] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:28] [0.6.1] [INFO] file.py:1267: [proxy:fd6a5b10] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 21:24:28] [0.6.1] [ERROR] file.py:1382: [proxy:fd6a5b10] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:24:28] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:24:28] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 所有歌曲 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=9c3Rv47-IHU [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=9c3Rv47-IHU [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1142: [proxy:94a9d42d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1145: [proxy:94a9d42d] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1173: [proxy:94a9d42d] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1219: [proxy:94a9d42d] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:24:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:24:29] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565069069"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:24:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565069069: False [2026-09-16 21:24:29] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:29] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:29] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1267: [proxy:94a9d42d] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 21:24:29] [0.6.1] [ERROR] file.py:1382: [proxy:94a9d42d] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:24:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:29] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:24:29] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 所有歌曲 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden allow_download:True [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:600: 根据【任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden】找到歌曲【['任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden']】 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden 匹配数量:1 auto_index:None [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0= [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=yRUDfIQabC4 [2026-09-16 21:24:29] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=yRUDfIQabC4 [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1142: [proxy:1d4ff308] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG [2026-09-16 21:24:29] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1145: [proxy:1d4ff308] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9uNENMQTA1YnlFRE81TG4wQkNOSHpzT2Qzb3luNDZIZyIsICJwbGF0Zm9ybSI6ICJZb3V0dWJlIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1173: [proxy:1d4ff308] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:24:29] [0.6.1] [INFO] file.py:1219: [proxy:1d4ff308] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:24:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:24:29] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "6p_1fJ2P6WU", "title": "\u4efb\u7d20\u6c50\u7cbe\u90098\u9996\u56fd\u8bed\u6b4c\u66f2\u7279\u522b\u7684\u58f0\u97f3\u7279\u522b\u7684\u6b4c\u8bcd", "artist": "\u8bd7\u4e50\u56ed Poetry and music garden", "artwork": "https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565069825"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:24:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565069825: False [2026-09-16 21:24:30] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:30] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:30] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'} [2026-09-16 21:24:30] [0.6.1] [INFO] file.py:1267: [proxy:1d4ff308] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICI2cF8xZkoyUDZXVSIsICJ0aXRsZSI6ICJcdTRlZmJcdTdkMjBcdTZjNTBcdTdjYmVcdTkwMDk4XHU5OTk2XHU1NmZkXHU4YmVkXHU2YjRjXHU2NmYyXHU3Mjc5XHU1MjJiXHU3Njg0XHU1OGYwXHU5N2YzXHU3Mjc5XHU1MjJiXHU3Njg0XHU2YjRjXHU4YmNkIiwgImFydGlzdCI6ICJcdThiZDdcdTRlNTBcdTU2ZWQgUG9ldHJ5IGFuZCBtdXNpYyBnYXJkZW4iLCAiYXJ0d29yayI6ICJodHRwczovL2kueXRpbWcuY29tL3ZpLzZwXzFmSjJQNldVL2hxNzIwLmpwZz9zcXA9LW9heW13RWpDT2dDRU1vQlNGcnlxNHFwQXhVSUFSVUFBQUFBR0FFbEFBRElRajBBZ0tKRGVBRT0mcnM9QU9u content_type=application/json content_length=43 [2026-09-16 21:24:30] [0.6.1] [ERROR] file.py:1382: [proxy:1d4ff308] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:24:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:24:30] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:24:30] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:24:30] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:24:30] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:24:30] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:24:30] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:24:30] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:24:30] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:24:30] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:24:30] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:24:31] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:24:31] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:24:31] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:24:31] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:24:31] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:24:31] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:24:31] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:24:37] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:任素汐精选8首国语歌曲特别的声音特别的歌词-诗乐园 Poetry and music garden [2026-09-16 21:24:37] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:24:38] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:24:38] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:24:38] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:24:38] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:24:38] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:24:38] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:24:39] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 68, "loop_type": 1, "media_type": 3, "play_song_detail": { "audio_id": "436490277987655", "position": 0, "duration": 4608 }, "track_list": [ "436490277987655" ] }'}} [2026-09-16 21:24:39] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:24:39] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:27:27] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:27:27] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:27:27] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 刘若英, type: music [2026-09-16 21:27:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 21:27:27] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565247329"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565247329: True [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 刘若英, type: music [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565248131"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565248131: True [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 17 results [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 音悦台 for keyword: 刘若英, type: music [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 音悦台 [2026-09-16 21:27:28] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:28] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 音悦台 not found [2026-09-16 21:27:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u97f3\u60a6\u53f0", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565248932"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565248932: False [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 音悦台: Plugin 音悦台 not found [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 音悦台 not found', 'id': 'msg_1789565248932'} [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 刘若英, type: music [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 21:27:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565249135"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565249135: False [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789565249135'} [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 刘若英, type: music [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 21:27:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565249339"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565249339: False [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789565249339'} [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 刘若英, type: music [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 21:27:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565249542"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565249542: False [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789565249542'} [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 刘若英, type: music [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 21:27:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565249746"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565249746: False [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789565249746'} [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 刘若英, type: music [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 21:27:29] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:27:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565249952"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565249952: False [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789565249952'} [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 刘若英, type: music [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 21:27:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565250156"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565250156: False [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789565250156'} [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 刘若英, type: music [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 21:27:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565250360"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565250360: False [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789565250360'} [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 刘若英, type: music [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '刘若英', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:27:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u5218\u82e5\u82f1", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789565250564"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565250564: False [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 21:27:30] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789565250564'} [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Search failed: Plugin 音悦台 not found [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:27:30] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 21:27:30] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'}, {'id': 'BV1WW41137DH', 'aid': 22860360, 'bvid': 'BV1WW41137DH', 'artist': '崔冠可', 'title': '刘若英《后来》 吉他', 'alias': '后来', 'album': 'BV1WW41137DH', 'artwork': 'http://i0.hdslb.com/bfs/archive/5c929e5ccae1b472d860f7e83282a1297f538eac.jpg', 'duration': 262, 'tags': ['COVER', '演奏', '独奏', '电吉他', '纯音乐', '音乐', '吉他'], 'date': '2018-05-02', 'platform': 'bilibili'}, {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'}, {'id': 'BV1a5e76xEjA', 'aid': 117272337188348, 'bvid': 'BV1a5e76xEjA', 'artist': '现场Live精选集', 'title': '刘若英 -后来 2026飞行日世界巡回演唱会高雄场 2026.9.12', 'album': 'BV1a5e76xEjA', 'artwork': 'http://i1.hdslb.com/bfs/archive/ccc49d1034fad402242c4c4d7909bf7a953eb3bf.jpg', 'duration': 297, 'tags': ['飞行日世界巡回演唱会', '音乐分享官', '高雄巨蛋', '刘若英', '后来'], 'date': '2026-09-15', 'platform': 'bilibili'}, {'id': 'BV1AJen6DEFN', 'aid': 117274400982866, 'bvid': 'BV1AJen6DEFN', 'artist': '青屿拾曲', 'title': '刘若英经典金曲合集|一开口就是一代人的青春回忆', 'album': 'BV1AJen6DEFN', 'artwork': 'http://i2.hdslb.com/bfs/archive/0fa11e97be5db8fe38f4a601cb27d2112f73c299.jpg', 'duration': 5159, 'tags': ['音乐分享官', '刘若英', '后来'], 'date': '2026-09-15', 'platform': 'bilibili'}, {'id': 'BV1xtCfBnEWZ', 'aid': 115579063110585, 'bvid': 'BV1xtCfBnEWZ', 'artist': '无损音乐分享厅', 'title': '【听歌向 第183期】盘点刘若英2025年爆火的歌曲(选择播放量最高的单曲)值得你单曲循环的歌单!', 'album': 'BV1xtCfBnEWZ', 'artwork': 'http://i0.hdslb.com/bfs/archive/0ea2a8590a619058194d8e827765591f8c5d524f.jpg', 'duration': 23000, 'tags': ['抖音热歌', '刘若英', '音乐榜单资讯', '网易云热歌', '听歌向', '网络热歌', '流行热歌', '华语热歌'], 'date': '2025-11-22', 'platform': 'bilibili'}, {'id': 'BV1Kf3A6SEPZ', 'aid': 116993063656947, 'bvid': 'BV1Kf3A6SEPZ', 'artist': '弹钢琴的小番茄', 'title': '45分钟刘若英经典音乐合集(纯享版)', 'album': 'BV1Kf3A6SEPZ', 'artwork': 'http://i1.hdslb.com/bfs/archive/bc10b728a47e8ec7f2c5f01b735d69c9fe86eda1.jpg', 'duration': 2761, 'tags': ['原来你也在这里', '经典音乐', '失恋', '音乐', '成全', '我们没有在一起', '很爱很爱你', '刘若英', '后来'], 'date': '2026-08-03', 'platform': 'bilibili'}, {'id': '', 'aid': 20916, 'bvid': '', 'artist': '吉他老杨', 'title': '后来(刘若英)指弹独奏详细讲解', 'album': '', 'artwork': 'https://archive.biliimg.com/bfs/archive/eb9077829f649289a74be40c813727c18f1409ab.jpg', 'duration': 0, 'tags': [''], 'date': 'Invalid Date', 'platform': 'bilibili'}, {'id': 'BV1UD4y1n7hd', 'aid': 735753205, 'bvid': 'BV1UD4y1n7hd', 'artist': '小蜜蜂音乐会', 'title': '【刘若英】无损音质经典选集丨《当爱在靠近》《原来你也在这里》《成全》《后来》', 'alias': '当爱在靠近', 'album': 'BV1UD4y1n7hd', 'artwork': 'http://i2.hdslb.com/bfs/archive/fb617dbbf145c4dad30dd3032a8d300b15bb16e0.jpg', 'duration': 2218, 'tags': ['精选歌曲', '音乐分享官', '经典歌曲', '音乐分享官6.0', '经典老歌', '当爱在靠近', '刘若英', '无损音质'], 'date': '2023-01-25', 'platform': 'bilibili'}, {'id': 'BV1FS496XEcP', 'aid': 117167362152301, 'bvid': 'BV1FS496XEcP', 'artist': '叛逆的55修', 'title': '【4K珍藏】一口气听刘若英7大神级现场!后来你们到底怎么了…', 'album': 'BV1FS496XEcP', 'artwork': 'http://i0.hdslb.com/bfs/archive/59bc0cac1f10dc9681d1d3bbe308a55f84f2623b.jpg', 'duration': 1888, 'tags': ['音乐现场', '4K', '伍佰', '演唱会', '暑期直拍夏令营', '华语现场', '刘若英'], 'date': '2026-08-27', 'platform': 'bilibili'}, {'id': 'BV1TBNd6pEoc', 'aid': 116934829934952, 'bvid': 'BV1TBNd6pEoc', 'artist': '乐听乐说', 'title': '在百万豪装录音棚听【刘若英】经典歌曲合集,【Hi-Res无损音质】,可后台播放,沉浸式放松听歌,开车自习室歌单', 'album': 'BV1TBNd6pEoc', 'artwork': 'http://i2.hdslb.com/bfs/archive/63e492d8865bd868dc8709163abe996b8093c761.jpg', 'duration': 6748, 'tags': ['【Hi-Res无损音质】', '全能音乐挑战赛', '沉浸式听歌', '热歌', '歌单', '录音棚', '华语经典', '流行歌曲', '高音质', '刘若英'], 'date': '2026-07-17', 'platform': 'bilibili'}, {'id': 'BV1x9ovBpELM', 'aid': 116471023865081, 'bvid': 'BV1x9ovBpELM', 'artist': '断了弦的音乐', 'title': '【Hi-Res无损音质】刘若英歌曲音乐合集', 'album': 'BV1x9ovBpELM', 'artwork': 'http://i1.hdslb.com/bfs/archive/3b60a791c8bb9d6b793e558d09add8bf36943ea1.jpg', 'duration': 21418, 'tags': ['全能音乐挑战赛', '音乐选集', '奶茶', 'hifi音乐', 'Hi-Res', '音乐合集', '刘若英', '无损音质', '音乐', '歌曲'], 'date': '2026-05-26', 'platform': 'bilibili'}, {'id': 'BV1PnufzjE45', 'aid': 114880896041209, 'bvid': 'BV1PnufzjE45', 'artist': '换你一回眸', 'title': '【无损音乐】刘若英歌曲音乐合集', 'album': 'BV1PnufzjE45', 'artwork': 'http://i0.hdslb.com/bfs/archive/a2c155a60c17c18a8d65fd21f9760012d0906324.jpg', 'duration': 21418, 'tags': ['刘若英', '歌曲', 'hifi音乐', '音乐', '无损音乐', '音乐合集', 'Hi-res', '高音质', 'KPOP回归前线', '奶茶'], 'date': '2025-07-23', 'platform': 'bilibili'}, {'id': 'BV1Xcep66Eyi', 'aid': 117275642432110, 'bvid': 'BV1Xcep66Eyi', 'artist': '现场Live精选集', 'title': '2026 刘若英飞行日巡回演唱会高雄站 4K完整版', 'album': 'BV1Xcep66Eyi', 'artwork': 'http://i2.hdslb.com/bfs/archive/984733c3c278d64d4d2dd20d04902cdbe059a90e.jpg', 'duration': 9254, 'tags': ['音乐分享官', '华语现场', '刘若英', '演唱会'], 'date': '2026-09-16', 'platform': 'bilibili'}, {'id': 'BV1gbxTetEzQ', 'aid': 113215186997397, 'bvid': 'BV1gbxTetEzQ', 'artist': '无损音乐合集', 'title': '【奶茶女神刘若英】后来我们尝尽遗憾与错过 精选刘若英好听歌曲合集 每一首都超级好听 无损音质 分集播放', 'album': 'BV1gbxTetEzQ', 'artwork': 'http://i2.hdslb.com/bfs/archive/0729694c779bf3e57ece8a363e083765e8ecc994.jpg', 'duration': 27269, 'tags': ['华语乐坛', '电台新星征集令', '电台新星征集令3.0', '奶茶女神', '刘若英', '歌词', '歌单', '流行', '无损音质', '音乐', '音乐选集'], 'date': '2024-10-02', 'platform': 'bilibili'}, {'id': 'BV1LEec6UEFa', 'aid': 117278561534408, 'bvid': 'BV1LEec6UEFa', 'artist': 'Hitomi_tanaka', 'title': '日本美女明星台北翻唱 刘若英的《后来》,现场粉丝反响热烈!', 'alias': '后来', 'album': 'BV1LEec6UEFa', 'artwork': 'http://i0.hdslb.com/bfs/archive/3d1e1a3c574080309a62ff3cb2d7aee40398ed64.jpg', 'duration': 310, 'tags': ['寻找100个宝藏vlogger', '必剪创作', '橘玛丽', '业界', '经典老歌', '女明星', '刘若英', '后来', '美女', '翻唱'], 'date': '2026-09-16', 'platform': 'bilibili'}, {'id': 'BV17roEB4EVs', 'aid': 116460387108005, 'bvid': 'BV17roEB4EVs', 'artist': '我们有什么资格说悲伤', 'title': '【补档自存】20251115 刘若英 飞行日 杭州演唱会 第二场', 'album': 'BV17roEB4EVs', 'artwork': 'http://i1.hdslb.com/bfs/archive/98a73634d460eb927695489075982e6601a00108.jpg', 'duration': 10061, 'tags': ['华语现场', '音乐现场', 'LIVE', '演唱会', '现场', '杭州演唱会', '杭州', '刘若英'], 'date': '2026-04-24', 'platform': 'bilibili'}, {'id': 'BV1vs4y1z7vd', 'aid': 996362585, 'bvid': 'BV1vs4y1z7vd', 'artist': '心灵兔汤', 'title': '【刘若英】MV合集(持续更新)', 'album': 'BV1vs4y1z7vd', 'artwork': 'http://i2.hdslb.com/bfs/archive/2e30f136e4996094fee2af3967992dfa231c3342.png', 'duration': 14189, 'tags': ['怀旧老歌', '华语MV', '粉丝音乐安利大赛2.0', '刘若英', '经典老歌', '音乐', '音乐合集', '流行音乐', 'MV', '歌曲', '国语MV'], 'date': '2023-05-19', 'platform': 'bilibili'}, {'id': 'AL_7jyuGNhc', 'title': '奶茶刘若英/劉若英 5首耳熟能详的歌曲合集,你会唱吗? 后来/为爱痴狂/很爱很爱你/当爱在靠近/原来你也在这里/', 'artist': '肥笨不肥', 'artwork': 'https://i.ytimg.com/vi/AL_7jyuGNhc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAFXitZULHhQR6Idr7WjXT1GrZypA', 'platform': 'Youtube'}, {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'}, {'id': 'BV1ydeE6jEpi', 'aid': 117273444487632, 'bvid': 'BV1ydeE6jEpi', 'artist': '健康您我他', 'title': '2026.09.12 劉若英「飛行日」2026巡迴演唱會 高雄站完整版', 'album': 'BV1ydeE6jEpi', 'artwork': 'http://i1.hdslb.com/bfs/archive/4639176f55a79050ff632099025e1f32bee94d6b.jpg', 'duration': 9254, 'tags': ['刘若英', 'LIVE', '演唱会'], 'date': '2026-09-15', 'platform': 'bilibili'}, {'id': 'BV1yoen6WEKF', 'aid': 117274266567787, 'bvid': 'BV1yoen6WEKF', 'artist': '讲讲三人行', 'title': '2026.09.12 劉若英「飛行日」2026巡迴演唱會 高雄站', 'album': 'BV1yoen6WEKF', 'artwork': 'http://i0.hdslb.com/bfs/archive/355194a41e6c22212f2582a79808e071a44ed94b.jpg', 'duration': 9254, 'tags': ['劉若英'], 'date': '2026-09-15', 'platform': 'bilibili'}, {'id': 'NBfwU1RSQ9M', 'title': '2026.09.12 劉若英「飛行日」2026巡迴演唱會 高雄站(含talking)', 'artist': 'Living in a Bubble', 'artwork': 'https://i.ytimg.com/vi/NBfwU1RSQ9M/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD6eIur16ziItJiEYSlXiIfgNj4Xw', 'platform': 'Youtube'}, {'id': 'fIjDpHiT6kY', 'title': '劉若英 René Liu【當愛在靠近】Official Music Video', 'artist': '滾石唱片 ROCK RECORDS', 'artwork': 'https://i.ytimg.com/vi/fIjDpHiT6kY/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAg7cuUXu4T5CRdm9rd_7oJRMBHOw', 'platform': 'Youtube'}, {'id': '3knNXwT08zc', 'title': '原來你也在這裡', 'artist': '劉若英Rene Liu', 'artwork': 'https://i.ytimg.com/vi/3knNXwT08zc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDrqPvxztzDW5T7FKhzEQM1YFMQyg', 'platform': 'Youtube'}, {'id': 'CfYG8Q3ZpMA', 'title': '劉若英 [ 我們沒有在一起 ] MV官方完整版', 'artist': '相信音樂BinMusic', 'artwork': 'https://i.ytimg.com/vi/CfYG8Q3ZpMA/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4AZYCgALSAYoCDAgAEAEYZSBlKGUwDw==&rs=AOn4CLDoi7X3-KPQaukVXQhW5N1DozM42w', 'platform': 'Youtube'}, {'id': 'TsLXvdYYuM0', 'title': '為愛痴狂', 'artist': 'jkmcheung', 'artwork': 'https://i.ytimg.com/vi/TsLXvdYYuM0/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Ac4FgALgA4oCDAgAEAEYfyAlKBMwDw==&rs=AOn4CLBwYgCS5KU77wjBJpPUaePb8v3kiQ', 'platform': 'Youtube'}, {'id': '3znMCsScCxo', 'title': '劉若英 René Liu【很愛很愛你 Love you so much】TVBS-G 『真情』片尾主題曲 Official Music Video', 'artist': '滾石唱片 ROCK RECORDS', 'artwork': 'https://i.ytimg.com/vi/3znMCsScCxo/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAwfUsrY8dFifJOUBiHpjjsh6XdRw', 'platform': 'Youtube'}, {'id': 'gVuo3X3Ygpg', 'title': '劉若英 René Liu【成全 Step aside】Official Music Video', 'artist': '滾石唱片 ROCK RECORDS', 'artwork': 'https://i.ytimg.com/vi/gVuo3X3Ygpg/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLB-yg7d7D-M3pCGfMLo160qfeHu8w', 'platform': 'Youtube'}, {'id': 'lnnAphGz-_w', 'title': '【ENG SUB】René Liu 劉若英【Later 後來】Official Music Video', 'artist': 'ROCK RECORDS English', 'artwork': 'https://i.ytimg.com/vi/lnnAphGz-_w/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA-2E24-z5ArAnhtDm26MJqUROZzA', 'platform': 'Youtube'}, {'id': 'jBJXMcjr63M', 'title': 'René 劉若英 ╳ MAYDAY 五月天 [ 成全 Fulfill ] 5525版 Official Live Video', 'artist': '相信音樂BinMusic', 'artwork': 'https://i.ytimg.com/vi/jBJXMcjr63M/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDmE3g_fv81VPvNc91CspRfBKNZBQ', 'platform': 'Youtube'}, {'id': '1-xOeZrO0PI', 'title': 'René 劉若英 [ 你從春天走來 You walk out of spring ] Official Music Video', 'artist': '相信音樂BinMusic', 'artwork': 'https://i.ytimg.com/vi/1-xOeZrO0PI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDl50dxTIdTn6JyVHdUZqsnd6fVrw', 'platform': 'Youtube'}, {'id': 'bToTopHwr60', 'title': '劉若英 René Liu【我等你 I will be waiting for you】Official Music Video', 'artist': '滾石唱片 ROCK RECORDS', 'artwork': 'https://i.ytimg.com/vi/bToTopHwr60/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLASwqX7rVMV6n7uvxsfp5zQ9jAC1A', 'platform': 'Youtube'}, {'id': 'dT65bo-gJDU', 'title': '【ENG SUB】René Liu 劉若英【Love You So Much 很愛很愛你】Official Music Video', 'artist': 'ROCK RECORDS English', 'artwork': 'https://i.ytimg.com/vi/dT65bo-gJDU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBGMB6M7rA-MuDvWQSNlu6_X4J2qw', 'platform': 'Youtube'}, {'id': 'NBBMw-AciKs', 'title': '分開旅行', 'artist': '劉若英Rene Liu', 'artwork': 'https://i.ytimg.com/vi/NBBMw-AciKs/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAiKHI-yECTwYBtB5NhGam3Si3-yw', 'platform': 'Youtube'}, {'id': 'tIk01ITX0Ik', 'title': 'René劉若英 [ 各自安好 Each Well ] Official Music Video', 'artist': '相信音樂BinMusic', 'artwork': 'https://i.ytimg.com/vi/tIk01ITX0Ik/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBk1M2eQbYMIh7JhBh9aRzpMRzQoA', 'platform': 'Youtube'}, {'id': '6CbR5K7GtI4', 'title': '劉若英唱《後來》大淚崩\u3000 感動哭到一度唱不下去', 'artist': 'Dt LIFESTYLE', 'artwork': 'https://i.ytimg.com/vi/6CbR5K7GtI4/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAHbstbw9kfArvME7V4BwVnnQjWGA', 'platform': 'Youtube'}] [2026-09-16 21:27:46] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:27:46] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:27:46] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:27:46] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:27:46] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 所有歌曲 [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 所有歌曲 [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=bMHLMgg1CZg [2026-09-16 21:27:46] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=bMHLMgg1CZg [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:27:46] [0.6.1] [INFO] file.py:1142: [proxy:9812fc00] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:27:46] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:27:46] [0.6.1] [INFO] file.py:1145: [proxy:9812fc00] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:27:46] [0.6.1] [INFO] file.py:1173: [proxy:9812fc00] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:27:46] [0.6.1] [INFO] file.py:1219: [proxy:9812fc00] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:27:46] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:27:46] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565266913"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565266913: False [2026-09-16 21:27:47] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:47] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:47] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:47] [0.6.1] [INFO] file.py:1267: [proxy:9812fc00] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:27:47] [0.6.1] [ERROR] file.py:1382: [proxy:9812fc00] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:27:47] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:27:47] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:27:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:27:47] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:47] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:47] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:27:47] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:27:47] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=lK0W5IWnS9M [2026-09-16 21:27:47] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=lK0W5IWnS9M [2026-09-16 21:27:47] [0.6.1] [INFO] file.py:1142: [proxy:c4978fdb] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:27:47] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:27:47] [0.6.1] [INFO] file.py:1145: [proxy:c4978fdb] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:27:47] [0.6.1] [INFO] file.py:1173: [proxy:c4978fdb] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:27:47] [0.6.1] [INFO] file.py:1219: [proxy:c4978fdb] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:27:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:27:47] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565267765"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565267765: False [2026-09-16 21:27:48] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:48] [0.6.1] [INFO] file.py:1267: [proxy:c4978fdb] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:27:48] [0.6.1] [ERROR] file.py:1382: [proxy:c4978fdb] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:27:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:27:48] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:27:48] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:48] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:48] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:27:48] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:27:48] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=U0eC1ti8dkQ [2026-09-16 21:27:48] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=U0eC1ti8dkQ [2026-09-16 21:27:48] [0.6.1] [INFO] file.py:1142: [proxy:4bb8dde9] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:27:48] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:27:48] [0.6.1] [INFO] file.py:1145: [proxy:4bb8dde9] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:27:48] [0.6.1] [INFO] file.py:1173: [proxy:4bb8dde9] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:27:48] [0.6.1] [INFO] file.py:1219: [proxy:4bb8dde9] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:27:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:27:48] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565268625"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565268625: False [2026-09-16 21:27:48] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:48] [0.6.1] [INFO] file.py:1267: [proxy:4bb8dde9] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:27:48] [0.6.1] [ERROR] file.py:1382: [proxy:4bb8dde9] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:27:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:48] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:27:48] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:27:49] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:49] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:49] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:27:49] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:27:49] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=3Tmif9UsHZ0 [2026-09-16 21:27:49] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=3Tmif9UsHZ0 [2026-09-16 21:27:49] [0.6.1] [INFO] file.py:1142: [proxy:ba6345e3] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:27:49] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:27:49] [0.6.1] [INFO] file.py:1145: [proxy:ba6345e3] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:27:49] [0.6.1] [INFO] file.py:1173: [proxy:ba6345e3] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:27:49] [0.6.1] [INFO] file.py:1219: [proxy:ba6345e3] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:27:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:27:49] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565269482"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565269482: False [2026-09-16 21:27:49] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:49] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:49] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:49] [0.6.1] [INFO] file.py:1267: [proxy:ba6345e3] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:27:49] [0.6.1] [ERROR] file.py:1382: [proxy:ba6345e3] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:27:49] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:27:49] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:27:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:27:50] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:50] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:50] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:27:50] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:27:50] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=aUO5CJ26Eds [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=aUO5CJ26Eds [2026-09-16 21:27:50] [0.6.1] [INFO] file.py:1142: [proxy:f93f39e2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:27:50] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:27:50] [0.6.1] [INFO] file.py:1145: [proxy:f93f39e2] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:27:50] [0.6.1] [INFO] file.py:1173: [proxy:f93f39e2] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:27:50] [0.6.1] [INFO] file.py:1219: [proxy:f93f39e2] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:27:50] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:27:50] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565270234"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:27:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:50] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565270234: False [2026-09-16 21:27:50] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:50] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:50] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:27:50] [0.6.1] [INFO] file.py:1267: [proxy:f93f39e2] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:27:50] [0.6.1] [ERROR] file.py:1382: [proxy:f93f39e2] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:27:50] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:27:50] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:27:50] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:27:50] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:27:50] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:27:50] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:27:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:27:51] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:27:51] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:27:51] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:27:51] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:27:51] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:27:51] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:27:51] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:27:57] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:27:57] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:27:58] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:27:58] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:27:58] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:27:58] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:27:58] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:27:58] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:27:59] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:27:59] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:27:59] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:32:40] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:32:40] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:32:40] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:32:40] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:32:40] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 allow_download:True [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:600: 根据【刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集】找到歌曲【['刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集']】 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 匹配数量:1 auto_index:None [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=2PtaXbJzDpY [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=2PtaXbJzDpY [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1142: [proxy:927d8f06] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZT [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1145: [proxy:927d8f06] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1173: [proxy:927d8f06] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1219: [proxy:927d8f06] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:32:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:32:40] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1JMec6xEK1", "aid": 117278410542119, "bvid": "BV1JMec6xEK1", "artist": "\u73b0\u573aLive\u7cbe\u9009\u96c6", "title": "\u5218\u82e5\u82f12026 \u98de\u884c\u65e5\u9ad8\u96c4\u6f14\u5531\u4f1a \u300a\u540e\u6765\u300bLive\u5b8c\u6574\u7248 4K", "alias": "\u540e\u6765", "album": "BV1JMec6xEK1", "artwork": "http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg", "duration": 302, "tags": ["\u6f14\u5531\u4f1a", "\u7535\u53f0\u65b0\u661f\u5f81\u96c6\u4ee4", "\u9ad8\u96c4", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-09-16", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565560092"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:32:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565560092: False [2026-09-16 21:32:40] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:40] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:40] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1267: [proxy:927d8f06] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9i content_type=application/json content_length=43 [2026-09-16 21:32:40] [0.6.1] [ERROR] file.py:1382: [proxy:927d8f06] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:32:40] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:32:40] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:32:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, cur_music:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 allow_download:True [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:600: 根据【刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集】找到歌曲【['刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集']】 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 匹配数量:1 auto_index:None [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=MqpTdkgVYOw [2026-09-16 21:32:40] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=MqpTdkgVYOw [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1142: [proxy:574000b6] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZT [2026-09-16 21:32:40] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1145: [proxy:574000b6] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1173: [proxy:574000b6] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:32:40] [0.6.1] [INFO] file.py:1219: [proxy:574000b6] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:32:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:32:40] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1JMec6xEK1", "aid": 117278410542119, "bvid": "BV1JMec6xEK1", "artist": "\u73b0\u573aLive\u7cbe\u9009\u96c6", "title": "\u5218\u82e5\u82f12026 \u98de\u884c\u65e5\u9ad8\u96c4\u6f14\u5531\u4f1a \u300a\u540e\u6765\u300bLive\u5b8c\u6574\u7248 4K", "alias": "\u540e\u6765", "album": "BV1JMec6xEK1", "artwork": "http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg", "duration": 302, "tags": ["\u6f14\u5531\u4f1a", "\u7535\u53f0\u65b0\u661f\u5f81\u96c6\u4ee4", "\u9ad8\u96c4", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-09-16", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565560943"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:32:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565560943: False [2026-09-16 21:32:41] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:41] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:41] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:41] [0.6.1] [INFO] file.py:1267: [proxy:574000b6] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9i content_type=application/json content_length=43 [2026-09-16 21:32:41] [0.6.1] [ERROR] file.py:1382: [proxy:574000b6] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:32:41] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:32:41] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:32:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, cur_music:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 allow_download:True [2026-09-16 21:32:41] [0.6.1] [INFO] music_library.py:600: 根据【刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集】找到歌曲【['刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集']】 [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 匹配数量:1 auto_index:None [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:41] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:41] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:32:41] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:32:41] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=4Ubkoj_GcQE [2026-09-16 21:32:41] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=4Ubkoj_GcQE [2026-09-16 21:32:41] [0.6.1] [INFO] file.py:1142: [proxy:54b8ddaf] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZT [2026-09-16 21:32:41] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:32:41] [0.6.1] [INFO] file.py:1145: [proxy:54b8ddaf] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv [2026-09-16 21:32:41] [0.6.1] [INFO] file.py:1173: [proxy:54b8ddaf] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:32:41] [0.6.1] [INFO] file.py:1219: [proxy:54b8ddaf] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:32:41] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:32:41] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1JMec6xEK1", "aid": 117278410542119, "bvid": "BV1JMec6xEK1", "artist": "\u73b0\u573aLive\u7cbe\u9009\u96c6", "title": "\u5218\u82e5\u82f12026 \u98de\u884c\u65e5\u9ad8\u96c4\u6f14\u5531\u4f1a \u300a\u540e\u6765\u300bLive\u5b8c\u6574\u7248 4K", "alias": "\u540e\u6765", "album": "BV1JMec6xEK1", "artwork": "http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg", "duration": 302, "tags": ["\u6f14\u5531\u4f1a", "\u7535\u53f0\u65b0\u661f\u5f81\u96c6\u4ee4", "\u9ad8\u96c4", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-09-16", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565561695"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:32:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565561695: False [2026-09-16 21:32:41] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:41] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:41] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:41] [0.6.1] [INFO] file.py:1267: [proxy:54b8ddaf] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9i content_type=application/json content_length=43 [2026-09-16 21:32:41] [0.6.1] [ERROR] file.py:1382: [proxy:54b8ddaf] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:32:41] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:32:41] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:32:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, cur_music:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 allow_download:True [2026-09-16 21:32:42] [0.6.1] [INFO] music_library.py:600: 根据【刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集】找到歌曲【['刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集']】 [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 匹配数量:1 auto_index:None [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:42] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:42] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:32:42] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:32:42] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=mYSob2b4oyg [2026-09-16 21:32:42] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=mYSob2b4oyg [2026-09-16 21:32:42] [0.6.1] [INFO] file.py:1142: [proxy:aa1d017d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZT [2026-09-16 21:32:42] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:32:42] [0.6.1] [INFO] file.py:1145: [proxy:aa1d017d] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv [2026-09-16 21:32:42] [0.6.1] [INFO] file.py:1173: [proxy:aa1d017d] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:32:42] [0.6.1] [INFO] file.py:1219: [proxy:aa1d017d] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:32:42] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:32:42] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1JMec6xEK1", "aid": 117278410542119, "bvid": "BV1JMec6xEK1", "artist": "\u73b0\u573aLive\u7cbe\u9009\u96c6", "title": "\u5218\u82e5\u82f12026 \u98de\u884c\u65e5\u9ad8\u96c4\u6f14\u5531\u4f1a \u300a\u540e\u6765\u300bLive\u5b8c\u6574\u7248 4K", "alias": "\u540e\u6765", "album": "BV1JMec6xEK1", "artwork": "http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg", "duration": 302, "tags": ["\u6f14\u5531\u4f1a", "\u7535\u53f0\u65b0\u661f\u5f81\u96c6\u4ee4", "\u9ad8\u96c4", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-09-16", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565562447"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:32:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:42] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565562447: False [2026-09-16 21:32:42] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:42] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:42] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:42] [0.6.1] [INFO] file.py:1267: [proxy:aa1d017d] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9i content_type=application/json content_length=43 [2026-09-16 21:32:42] [0.6.1] [ERROR] file.py:1382: [proxy:aa1d017d] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:32:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:42] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:32:42] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, cur_music:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 allow_download:True [2026-09-16 21:32:43] [0.6.1] [INFO] music_library.py:600: 根据【刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集】找到歌曲【['刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集']】 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 匹配数量:1 auto_index:None [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:43] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:43] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:32:43] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:32:43] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=h98F33co49w [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=h98F33co49w [2026-09-16 21:32:43] [0.6.1] [INFO] file.py:1142: [proxy:b85ca913] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZT [2026-09-16 21:32:43] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:32:43] [0.6.1] [INFO] file.py:1145: [proxy:b85ca913] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS81ZTU2MTAyNmY4NzY2Y2UyYzYzNjhkNTY5ZjU5ZTA3ODM0ZWQ3ZGQzLmpwZyIsICJkdXJhdGlvbiI6IDMwMiwgInRhZ3MiOiBbIlx1NmYxNFx1NTUzMVx1NGYxYSIsICJcdTc1MzVcdTUzZjBcdTY1YjBcdTY2MWZcdTVmODFcdTk2YzZcdTRlZTQiLCAiXHU5YWQ4XHU5NmM0IiwgIlx1NTIxOFx1ODJlNVx1ODJmMSIsICJcdTU0MGVcdTY3NjUiXSwgImRhdGUiOiAiMjAyNi0wOS0xNiIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv [2026-09-16 21:32:43] [0.6.1] [INFO] file.py:1173: [proxy:b85ca913] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:32:43] [0.6.1] [INFO] file.py:1219: [proxy:b85ca913] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNv headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:32:43] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:32:43] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:43] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1JMec6xEK1", "aid": 117278410542119, "bvid": "BV1JMec6xEK1", "artist": "\u73b0\u573aLive\u7cbe\u9009\u96c6", "title": "\u5218\u82e5\u82f12026 \u98de\u884c\u65e5\u9ad8\u96c4\u6f14\u5531\u4f1a \u300a\u540e\u6765\u300bLive\u5b8c\u6574\u7248 4K", "alias": "\u540e\u6765", "album": "BV1JMec6xEK1", "artwork": "http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg", "duration": 302, "tags": ["\u6f14\u5531\u4f1a", "\u7535\u53f0\u65b0\u661f\u5f81\u96c6\u4ee4", "\u9ad8\u96c4", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-09-16", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565563204"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:32:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:43] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565563204: False [2026-09-16 21:32:43] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:43] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:43] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1JMec6xEK1', 'aid': 117278410542119, 'bvid': 'BV1JMec6xEK1', 'artist': '现场Live精选集', 'title': '刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K', 'alias': '后来', 'album': 'BV1JMec6xEK1', 'artwork': 'http://i1.hdslb.com/bfs/archive/5e561026f8766ce2c6368d569f59e07834ed7dd3.jpg', 'duration': 302, 'tags': ['演唱会', '电台新星征集令', '高雄', '刘若英', '后来'], 'date': '2026-09-16', 'platform': 'bilibili'} [2026-09-16 21:32:43] [0.6.1] [INFO] file.py:1267: [proxy:b85ca913] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYWlkIjogMTE3Mjc4NDEwNTQyMTE5LCAiYnZpZCI6ICJCVjFKTWVjNnhFSzEiLCAiYXJ0aXN0IjogIlx1NzNiMFx1NTczYUxpdmVcdTdjYmVcdTkwMDlcdTk2YzYiLCAidGl0bGUiOiAiXHU1MjE4XHU4MmU1XHU4MmYxMjAyNiBcdTk4ZGVcdTg4NGNcdTY1ZTVcdTlhZDhcdTk2YzRcdTZmMTRcdTU1MzFcdTRmMWEgXHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiTGl2ZVx1NWI4Y1x1NjU3NFx1NzI0OCA0SyIsICJhbGlhcyI6ICJcdTU0MGVcdTY3NjUiLCAiYWxidW0iOiAiQlYxSk1lYzZ4RUsxIiwgImFydHdvcmsiOiAiaHR0cDovL2kxLmhkc2xiLmNvbS9i content_type=application/json content_length=43 [2026-09-16 21:32:43] [0.6.1] [ERROR] file.py:1382: [proxy:b85ca913] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:32:43] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:32:43] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:32:43] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:32:43] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:32:43] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:32:43] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:32:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:32:45] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:32:45] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:32:45] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:32:45] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:32:45] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:32:45] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:32:45] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:32:51] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:刘若英2026 飞行日高雄演唱会 《后来》Live完整版 4K-现场Live精选集 [2026-09-16 21:32:51] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:32:52] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:32:52] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:32:52] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:32:52] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:32:52] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:32:52] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:32:53] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:32:53] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:32:53] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:33:08] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:33:08] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:33:08] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:33:08] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:33:08] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=GHFAnpPRQOw [2026-09-16 21:33:08] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=GHFAnpPRQOw [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:33:08] [0.6.1] [INFO] file.py:1142: [proxy:0b004198] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:08] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:08] [0.6.1] [INFO] file.py:1145: [proxy:0b004198] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:08] [0.6.1] [INFO] file.py:1173: [proxy:0b004198] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:08] [0.6.1] [INFO] file.py:1219: [proxy:0b004198] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:08] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:08] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:08] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565588912"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565588912: False [2026-09-16 21:33:09] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:09] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:09] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:09] [0.6.1] [INFO] file.py:1267: [proxy:0b004198] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:09] [0.6.1] [ERROR] file.py:1382: [proxy:0b004198] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:09] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:09] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:33:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:09] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:09] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:09] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:09] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:09] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=CEnMRGvSlA4 [2026-09-16 21:33:09] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=CEnMRGvSlA4 [2026-09-16 21:33:09] [0.6.1] [INFO] file.py:1142: [proxy:198ca97d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:09] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:09] [0.6.1] [INFO] file.py:1145: [proxy:198ca97d] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:09] [0.6.1] [INFO] file.py:1173: [proxy:198ca97d] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:09] [0.6.1] [INFO] file.py:1219: [proxy:198ca97d] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:09] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565589669"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565589669: False [2026-09-16 21:33:09] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:09] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:09] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:09] [0.6.1] [INFO] file.py:1267: [proxy:198ca97d] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:09] [0.6.1] [ERROR] file.py:1382: [proxy:198ca97d] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:09] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:09] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:33:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:10] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:10] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:10] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:10] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:10] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=Z18yfXm9tKM [2026-09-16 21:33:10] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=Z18yfXm9tKM [2026-09-16 21:33:10] [0.6.1] [INFO] file.py:1142: [proxy:7744759f] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:10] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:10] [0.6.1] [INFO] file.py:1145: [proxy:7744759f] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:10] [0.6.1] [INFO] file.py:1173: [proxy:7744759f] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:10] [0.6.1] [INFO] file.py:1219: [proxy:7744759f] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:10] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565590420"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565590420: False [2026-09-16 21:33:10] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:10] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:10] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:10] [0.6.1] [INFO] file.py:1267: [proxy:7744759f] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:10] [0.6.1] [ERROR] file.py:1382: [proxy:7744759f] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:10] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:10] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:33:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=nZE_kSPiUrc [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=nZE_kSPiUrc [2026-09-16 21:33:11] [0.6.1] [INFO] file.py:1142: [proxy:d1a44ea4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:11] [0.6.1] [INFO] file.py:1145: [proxy:d1a44ea4] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:11] [0.6.1] [INFO] file.py:1173: [proxy:d1a44ea4] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:11] [0.6.1] [INFO] file.py:1219: [proxy:d1a44ea4] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:11] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565591271"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565591271: False [2026-09-16 21:33:11] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:11] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:11] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:11] [0.6.1] [INFO] file.py:1267: [proxy:d1a44ea4] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:11] [0.6.1] [ERROR] file.py:1382: [proxy:d1a44ea4] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:11] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:11] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:33:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:11] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:11] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:12] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=7usewcQj0wo [2026-09-16 21:33:12] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=7usewcQj0wo [2026-09-16 21:33:12] [0.6.1] [INFO] file.py:1142: [proxy:393017fa] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:12] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:12] [0.6.1] [INFO] file.py:1145: [proxy:393017fa] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:12] [0.6.1] [INFO] file.py:1173: [proxy:393017fa] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:12] [0.6.1] [INFO] file.py:1219: [proxy:393017fa] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:12] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:12] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565592029"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565592029: False [2026-09-16 21:33:12] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:12] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:12] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:12] [0.6.1] [INFO] file.py:1267: [proxy:393017fa] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:12] [0.6.1] [ERROR] file.py:1382: [proxy:393017fa] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:12] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:12] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:33:12] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:33:12] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:33:12] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:33:12] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:33:12] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:33:12] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:12] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:12] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:13] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:33:13] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:33:13] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:13] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:33:13] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:13] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:33:13] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:33:19] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:19] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:33:19] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:33:19] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:19] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:19] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:19] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:33:21] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:33:21] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 68, "loop_type": 2, "media_type": 5, "play_song_detail": { "audio_id": "3131185112296737482", "position": 3948, "duration": 377712 }, "track_list": [ "3131185112296737482", "3131185108933954136", "3131185111117088971", "3131185112960486291", "3131185123983117881", "3131185111760912142", "3131185101916882791", "3131185119205804881", "3131185114123357437", "3131185125648256231" ] }'}} [2026-09-16 21:33:21] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:33:21] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:33:32] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:33:32] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:33:32] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:33:32] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:33:32] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=yVNs2R2DZO8 [2026-09-16 21:33:32] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=yVNs2R2DZO8 [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:33:32] [0.6.1] [INFO] file.py:1142: [proxy:130a61ee] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:32] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:32] [0.6.1] [INFO] file.py:1145: [proxy:130a61ee] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:32] [0.6.1] [INFO] file.py:1173: [proxy:130a61ee] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:32] [0.6.1] [INFO] file.py:1219: [proxy:130a61ee] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:32] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:32] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565612890"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:33] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565612890: False [2026-09-16 21:33:33] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:33] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:33] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:33] [0.6.1] [INFO] file.py:1267: [proxy:130a61ee] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:33] [0.6.1] [ERROR] file.py:1382: [proxy:130a61ee] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:33] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:33] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:33:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:33] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:33] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:33] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:33] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:33] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=RB7JjaREbOI [2026-09-16 21:33:33] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=RB7JjaREbOI [2026-09-16 21:33:33] [0.6.1] [INFO] file.py:1142: [proxy:1ad6b48b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:33] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:33] [0.6.1] [INFO] file.py:1145: [proxy:1ad6b48b] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:33] [0.6.1] [INFO] file.py:1173: [proxy:1ad6b48b] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:33] [0.6.1] [INFO] file.py:1219: [proxy:1ad6b48b] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:33] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:33] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:33] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565613642"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:33] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565613642: False [2026-09-16 21:33:33] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:33] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:33] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:33] [0.6.1] [INFO] file.py:1267: [proxy:1ad6b48b] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:33] [0.6.1] [ERROR] file.py:1382: [proxy:1ad6b48b] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:33] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:33] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:33:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:34] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:34] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:34] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:34] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:34] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=z_DH4egbNuw [2026-09-16 21:33:34] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=z_DH4egbNuw [2026-09-16 21:33:34] [0.6.1] [INFO] file.py:1142: [proxy:fde82a12] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:34] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:34] [0.6.1] [INFO] file.py:1145: [proxy:fde82a12] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:34] [0.6.1] [INFO] file.py:1173: [proxy:fde82a12] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:34] [0.6.1] [INFO] file.py:1219: [proxy:fde82a12] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:34] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565614394"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565614394: False [2026-09-16 21:33:34] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:34] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:34] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:34] [0.6.1] [INFO] file.py:1267: [proxy:fde82a12] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:34] [0.6.1] [ERROR] file.py:1382: [proxy:fde82a12] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:34] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:34] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:33:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=PdjkDzJ59cU [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=PdjkDzJ59cU [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1142: [proxy:8b7a5e12] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1145: [proxy:8b7a5e12] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1173: [proxy:8b7a5e12] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1219: [proxy:8b7a5e12] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:35] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565615146"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565615146: False [2026-09-16 21:33:35] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:35] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:35] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1267: [proxy:8b7a5e12] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:35] [0.6.1] [ERROR] file.py:1382: [proxy:8b7a5e12] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:35] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:35] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:33:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:440: get_next_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:441: _play_next. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 allow_download:True [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:600: 根据【【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子】找到歌曲【['【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子']】 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 匹配数量:1 auto_index:None [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:513: cur_music 【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1184: get_music_url name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ== [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=Ddq_QlAtHAw [2026-09-16 21:33:35] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=Ddq_QlAtHAw [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1142: [proxy:227cb384] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMl [2026-09-16 21:33:35] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1145: [proxy:227cb384] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55dGltZy5jb20vdmkvMlY0S0gzTTFmSG8vaHE3MjAuanBnP3NxcD0tb2F5bXdFakNPZ0NFTW9CU0ZyeXE0cXBBeFVJQVJVQUFBQUFHQUVsQUFESVFqMEFnS0pEZUFFPSZycz1BT240Q0xDU0JqU2dTblVyRXVfZ0ZOUnZSRHRObGpTeDl3IiwgInBsYXRmb3JtIjogIllvdXR1YmUifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1173: [proxy:227cb384] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:35] [0.6.1] [INFO] file.py:1219: [proxy:227cb384] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8v headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:33:35] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "2V4KH3M1fHo", "title": "\u301042\u9996\u5218\u82e5\u82f1\u7ecf\u5178\u6b4c\u66f2\u5408\u96c6\u3011\u4e3a\u4ec0\u4e482023\u5e74\u8fd8\u5728\u542c\u300a\u540e\u6765\u300b\uff0c\u56e0\u4e3a\u300a\u540e\u6765\u300b\u662f\u5979\u6700\u559c\u6b22\u7684\u6b4c\uff01", "artist": "\u7231\u9017\u54e5\u5f3a\u5b50", "artwork": "https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789565615900"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565615900: False [2026-09-16 21:33:36] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:36] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:36] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': '2V4KH3M1fHo', 'title': '【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!', 'artist': '爱逗哥强子', 'artwork': 'https://i.ytimg.com/vi/2V4KH3M1fHo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCSBjSgSnUrEu_gFNRvRDtNljSx9w', 'platform': 'Youtube'} [2026-09-16 21:33:36] [0.6.1] [INFO] file.py:1267: [proxy:227cb384] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICIyVjRLSDNNMWZIbyIsICJ0aXRsZSI6ICJcdTMwMTA0Mlx1OTk5Nlx1NTIxOFx1ODJlNVx1ODJmMVx1N2VjZlx1NTE3OFx1NmI0Y1x1NjZmMlx1NTQwOFx1OTZjNlx1MzAxMVx1NGUzYVx1NGVjMFx1NGU0ODIwMjNcdTVlNzRcdThmZDhcdTU3MjhcdTU0MmNcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdWZmMGNcdTU2ZTBcdTRlM2FcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTY2MmZcdTU5NzlcdTY3MDBcdTU1OWNcdTZiMjJcdTc2ODRcdTZiNGNcdWZmMDEiLCAiYXJ0aXN0IjogIlx1NzIzMVx1OTAxN1x1NTRlNVx1NWYzYVx1NWI1MCIsICJhcnR3b3JrIjogImh0dHBzOi8vaS55 content_type=application/json content_length=43 [2026-09-16 21:33:36] [0.6.1] [ERROR] file.py:1382: [proxy:227cb384] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:36] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:36] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:33:36] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:33:36] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:33:36] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:33:36] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:33:36] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:33:36] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:36] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:36] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:33:37] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:33:37] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:33:37] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:37] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:33:37] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:33:37] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:33:37] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:33:43] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:【42首刘若英经典歌曲合集】为什么2023年还在听《后来》,因为《后来》是她最喜欢的歌!-爱逗哥强子 [2026-09-16 21:33:43] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:33:43] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:33:43] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:43] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:43] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:43] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:33:44] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:33:44] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:33:44] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:33:44] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:33:56] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:33:56] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:33:56] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:33:56] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:33:56] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=MWfuRqEbwlY [2026-09-16 21:33:56] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=MWfuRqEbwlY [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:33:56] [0.6.1] [INFO] file.py:1142: [proxy:3d619ec9] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:33:56] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:33:56] [0.6.1] [INFO] file.py:1145: [proxy:3d619ec9] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:33:56] [0.6.1] [INFO] file.py:1173: [proxy:3d619ec9] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:56] [0.6.1] [INFO] file.py:1219: [proxy:3d619ec9] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:56] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:33:56] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:56] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565636881"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:57] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565636881: False [2026-09-16 21:33:57] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:57] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:57] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:57] [0.6.1] [INFO] file.py:1267: [proxy:3d619ec9] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:33:57] [0.6.1] [ERROR] file.py:1382: [proxy:3d619ec9] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:57] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:57] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:33:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=EWWpnqoVXMc [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=EWWpnqoVXMc [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1142: [proxy:cc4123b4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1145: [proxy:cc4123b4] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1173: [proxy:cc4123b4] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1219: [proxy:cc4123b4] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:58] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:33:58] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565638033"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565638033: False [2026-09-16 21:33:58] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1267: [proxy:cc4123b4] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:33:58] [0.6.1] [ERROR] file.py:1382: [proxy:cc4123b4] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:58] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:58] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:33:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=xwzRV3etYOM [2026-09-16 21:33:58] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=xwzRV3etYOM [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1142: [proxy:8873da2b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:33:58] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1145: [proxy:8873da2b] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1173: [proxy:8873da2b] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1219: [proxy:8873da2b] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:58] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:33:58] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565638787"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565638787: False [2026-09-16 21:33:58] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:58] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:58] [0.6.1] [INFO] file.py:1267: [proxy:8873da2b] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:33:58] [0.6.1] [ERROR] file.py:1382: [proxy:8873da2b] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:59] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:59] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:33:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:33:59] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:59] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:33:59] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:33:59] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:33:59] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=n1gsH-q7PtE [2026-09-16 21:33:59] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=n1gsH-q7PtE [2026-09-16 21:33:59] [0.6.1] [INFO] file.py:1142: [proxy:42d75ec5] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:33:59] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:33:59] [0.6.1] [INFO] file.py:1145: [proxy:42d75ec5] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:33:59] [0.6.1] [INFO] file.py:1173: [proxy:42d75ec5] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:33:59] [0.6.1] [INFO] file.py:1219: [proxy:42d75ec5] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:33:59] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:33:59] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:59] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565639538"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:33:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:59] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565639538: False [2026-09-16 21:33:59] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:59] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:59] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:33:59] [0.6.1] [INFO] file.py:1267: [proxy:42d75ec5] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:33:59] [0.6.1] [ERROR] file.py:1382: [proxy:42d75ec5] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:33:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:33:59] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:33:59] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:440: get_next_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:441: _play_next. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 allow_download:True [2026-09-16 21:34:00] [0.6.1] [INFO] music_library.py:600: 根据【刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室】找到歌曲【['刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室']】 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 匹配数量:1 auto_index:None [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:513: cur_music 刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:34:00] [0.6.1] [INFO] music_library.py:1184: get_music_url name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:34:00] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:34:00] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0= [2026-09-16 21:34:00] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=Zm1_eN2CQj8 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=Zm1_eN2CQj8 [2026-09-16 21:34:00] [0.6.1] [INFO] file.py:1142: [proxy:8155531c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaG [2026-09-16 21:34:00] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') [2026-09-16 21:34:00] [0.6.1] [INFO] file.py:1145: [proxy:8155531c] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MjllMDEzYTk5YTMxOWVmMGIzNjBiNzhkNDJiOTQ1MjJhZWFjMzYuanBnIiwgImR1cmF0aW9uIjogNTM4OCwgInRhZ3MiOiBbIlx1NTE2OFx1ODBmZFx1OTdmM1x1NGU1MFx1NjMxMVx1NjIxOFx1OGQ1YiIsICJcdTdlY2ZcdTUxNzgiLCAiXHU1MjE4XHU4MmU1XHU4MmYxIiwgIlx1NTQwZVx1Njc2NSJdLCAiZGF0ZSI6ICIyMDI2LTAyLTE0IiwgInBsYXRmb3JtIjogImJpbGliaWxpIn0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y [2026-09-16 21:34:00] [0.6.1] [INFO] file.py:1173: [proxy:8155531c] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:34:00] [0.6.1] [INFO] file.py:1219: [proxy:8155531c] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29y headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:34:00] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:34:00] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:34:00] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV16AZ7BtE5v", "aid": 116068857355657, "bvid": "BV16AZ7BtE5v", "artist": "\u6d77\u6e7e\u5de5\u4f5c\u5ba4", "title": "\u5218\u82e5\u82f1 \u5341\u9996\u7ecf\u5178\u597d\u542c\u6b4c\u66f2\u5408\u96c6\u300a\u540e\u6765\u300b\u300a\u5f88\u7231\u5f88\u7231\u4f60\u300b384", "alias": "\u540e\u6765", "album": "BV16AZ7BtE5v", "artwork": "http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg", "duration": 5388, "tags": ["\u5168\u80fd\u97f3\u4e50\u6311\u6218\u8d5b", "\u7ecf\u5178", "\u5218\u82e5\u82f1", "\u540e\u6765"], "date": "2026-02-14", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789565640396"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:34:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:34:00] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789565640396: False [2026-09-16 21:34:00] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:34:00] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:34:00] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV16AZ7BtE5v', 'aid': 116068857355657, 'bvid': 'BV16AZ7BtE5v', 'artist': '海湾工作室', 'title': '刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384', 'alias': '后来', 'album': 'BV16AZ7BtE5v', 'artwork': 'http://i0.hdslb.com/bfs/archive/1429e013a99a319ef0b360b78d42b94522aeac36.jpg', 'duration': 5388, 'tags': ['全能音乐挑战赛', '经典', '刘若英', '后来'], 'date': '2026-02-14', 'platform': 'bilibili'} [2026-09-16 21:34:00] [0.6.1] [INFO] file.py:1267: [proxy:8155531c] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYWlkIjogMTE2MDY4ODU3MzU1NjU3LCAiYnZpZCI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0aXN0IjogIlx1NmQ3N1x1NmU3ZVx1NWRlNVx1NGY1Y1x1NWJhNCIsICJ0aXRsZSI6ICJcdTUyMThcdTgyZTVcdTgyZjEgXHU1MzQxXHU5OTk2XHU3ZWNmXHU1MTc4XHU1OTdkXHU1NDJjXHU2YjRjXHU2NmYyXHU1NDA4XHU5NmM2XHUzMDBhXHU1NDBlXHU2NzY1XHUzMDBiXHUzMDBhXHU1Zjg4XHU3MjMxXHU1Zjg4XHU3MjMxXHU0ZjYwXHUzMDBiMzg0IiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjE2QVo3QnRFNXYiLCAiYXJ0d29yayI6 content_type=application/json content_length=43 [2026-09-16 21:34:00] [0.6.1] [ERROR] file.py:1382: [proxy:8155531c] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:34:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:34:00] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:34:00] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:34:00] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:34:00] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:34:00] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:34:00] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:34:01] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:34:01] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:34:01] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:34:01] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:34:01] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:34:01] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:34:01] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:34:07] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:34:07] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:34:08] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:34:08] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:34:08] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:34:08] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:34:08] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:34:09] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:34:09] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:34:09] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:34:09] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:40:12] [0.6.1] [INFO] device_player.py:1142: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 68, "loop_type": 2, "media_type": 5, "play_song_detail": { "audio_id": "3131185112296737482", "position": 107301, "duration": 377712 }, "track_list": [ "3131185112296737482", "3131185108933954136", "3131185111117088971", "3131185112960486291", "3131185123983117881", "3131185111760912142", "3131185101916882791", "3131185119205804881", "3131185114123357437", "3131185125648256231" ] }'}} [2026-09-16 21:40:12] [0.6.1] [INFO] device_player.py:1149: get_volume. volume:68 [2026-09-16 21:40:58] [0.6.1] [INFO] device.py:107: playurl did: 2181600216 url: https://lhttp.qtfm.cn/live/4915/64k.mp3 [2026-09-16 21:40:58] [0.6.1] [INFO] xiaomusic.py:308: 手动推送链接:https://lhttp.qtfm.cn/live/4915/64k.mp3 [2026-09-16 21:41:00] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://lhttp.qtfm.cn/live/4915/64k.mp3 audio_id:436490277987655 [2026-09-16 21:41:00] [0.6.1] [INFO] device_player.py:986: group_player_play https://lhttp.qtfm.cn/live/4915/64k.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:41:06] [0.6.1] [INFO] device.py:117: tts 2181600216 播放文字测试 [2026-09-16 21:41:06] [0.6.1] [INFO] device_player.py:679: try do_tts value:播放文字测试 [2026-09-16 21:41:06] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 播放文字测试 [2026-09-16 21:41:06] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 播放文字测试, voice: zh-CN-XiaoyiNeural [2026-09-16 21:41:07] [0.6.1] [INFO] network_utils.py:452: 语音文件生成成功: music/tmp/7773e708b7de1f48956c65965d540e84.mp3 [2026-09-16 21:41:07] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/7773e708b7de1f48956c65965d540e84.mp3 [2026-09-16 21:41:07] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/7773e708b7de1f48956c65965d540e84.mp3, filename:tmp/7773e708b7de1f48956c65965d540e84.mp3 [2026-09-16 21:41:07] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/7773e708b7de1f48956c65965d540e84.mp3 [2026-09-16 21:41:07] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/7773e708b7de1f48956c65965d540e84.mp3 audio_id:436490277987655 [2026-09-16 21:41:07] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/7773e708b7de1f48956c65965d540e84.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:41:07] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/7773e708b7de1f48956c65965d540e84.mp3 [2026-09-16 21:41:07] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "2.136000" } } [2026-09-16 21:41:07] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 2.136 seconds for file: music/tmp/7773e708b7de1f48956c65965d540e84.mp3 [2026-09-16 21:41:07] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 2.136 秒 [2026-09-16 21:41:07] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,2.136 秒后停止 [2026-09-16 21:41:09] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:刘若英 十首经典好听歌曲合集《后来》《很爱很爱你》384-海湾工作室 [2026-09-16 21:41:09] [0.6.1] [INFO] device_player.py:797: 不会继续播放歌曲. isplaying:False isdownloading:False [2026-09-16 21:41:11] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:41:11] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:41:11] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:41:11] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:41:11] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:41:13] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:41:14] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:41:14] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:41:14] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:41:16] [0.6.1] [INFO] system.py:132: getsetting device_list: [{'deviceID': '02b2adf4-4fad-42ed-a30f-38072ff7b951', 'serialNumber': '62833/A5X147389', 'name': 'Xiaomi 智能音箱 Pro', 'alias': 'Xiaomi 智能音箱 Pro', 'current': False, 'presence': 'online', 'address': '60.255.127.33', 'miotDID': '2181600216', 'hardware': 'OH2P', 'romVersion': '1.62.2', 'romChannel': 'release', 'capabilities': {'multiroom_music': 1, 'multiroom_miplay': 1, 'content_blacklist': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'user_nick_name': 1, 'night_mode': 1, 'init_wakeup_and_dialogue': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'stereo_mode_v2': 1, 'report_times': 1, 'alarm_volume': 1, 'ai_instruction': 1, 'custom_tts': 1, 'classified_alarm': 1, 'continuous_desc_x10a': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'child_mode': 1, 'night_mode_detail': 1, 'voice_print_multidevice': 1, 'baby_schedule': 1, 'tone_setting': 1, 'earthquake': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'lamp_efficacy': 1, 'xiaomi_voip': 1, 'continuous_dialogue': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'yunduantts': 1, 'answer_tone': 1, 'stereo_mode': 1, 'mico_current': 1, 'soundfx_tuning': 1, 'voip_used_time': 1}, 'remoteCtrlType': '', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkJhcEpoR3Nrdjd4RUhXSFJnUkNhWi9HQkplZ0JLWDFxVk5YWXYvUlNKNkF1aVhtd0VvRkUrclRadUZHVDRXOVpULzk1d291bzN3QjU0T0pRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjIuMiIsInNpZ24iOiI3OWEyYTk5NjEwZTQ0MTJiZDYyMWYwOGMzODAzNTQzMjNlYWM5NWQxZjRlODQ4NzM5YTNjMDVlZjg1ZTZjNjFlIiwic24iOiI2MjgzMy9BNVgxNDczODkifQ==', 'deviceProfile': 'eyJzaWduIjoiMjFhNjVkNmY2OTAyYWYzMDkwOGU3NmE0YWI0MmRiMjdhOTUzMDNlMmY0MDI1OGQ1MWI3MjI2YjM2N2NjNjRjYiIsImRldmljZUlkIjoiMDJiMmFkZjQtNGZhZC00MmVkLWEzMGYtMzgwNzJmZjdiOTUxIn0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '50:FE:39:F4:2A:38', 'ssid': ''}, {'deviceID': '5e8b23d4-d770-4533-8f45-c5912841dc47', 'serialNumber': '31833/C2WW44286', 'name': '小爱音箱Play增强版', 'alias': '小爱音箱Play增强版', 'current': False, 'presence': 'online', 'address': 'unknown', 'miotDID': '726110455', 'hardware': 'L05C', 'romVersion': '1.68.2', 'romChannel': 'release', 'capabilities': {'content_blacklist': 1, 'lan_tv_control': 1, 'night_mode_v2': 1, 'school_timetable': 1, 'night_mode': 1, 'player_pause_timer': 1, 'dialog_h5': 1, 'child_mode_2': 1, 'report_times': 1, 'ai_instruction': 1, 'classified_alarm': 1, 'loadmore_v2': 1, 'mesh': 1, 'ai_protocol_3_0': 1, 'night_mode_detail': 1, 'child_mode': 1, 'voice_print_multidevice': 1, 'tone_setting': 1, 'baby_schedule': 1, 'nearby_wakeup_v2': 1, 'alarm_repeat_option_v2': 1, 'family_voice': 1, 'bluetooth_option_v2': 1, 'custom_ir': 1, 'mesh_conflict_check': 1, 'yueyu': 1, 'led_clock': 1, 'yunduantts': 1, 'mico_current': 1}, 'remoteCtrlType': 'miot', 'deviceSNProfile': 'eyJzaWduYXR1cmUiOiJHQkNWL205SWRBdFRacEY4YmI4c24zVjhHQkszNVQxOEYyRkc1YVIxaEx4NFg5VjhBZ0VvRkdSMEdoeWRNbmtuTk54WDRXVlhsNnJLZFA5YkpRZ1NBQT09Iiwicm9tVmVyc2lvbiI6IjEuNjguMiIsInNpZ24iOiIxMWNkY2Y3NGM4ZjY4MGYzZDJkZTk2YTU1YTMxZjU1MzRhZGUxYzVmZDk5M2Q3MTJkNTAyYmI4ZDIwZWFhYTBlIiwic24iOiIzMTgzMy9DMldXNDQyODYifQ==', 'deviceProfile': 'eyJzaWduIjoiOGEzYTNkZWMxYjAxNjRkNjk0NDQ0MWVjMTBlMmM2ZWQ0NTc0NGUxNDE1OTQxMjA4ZTdjYjRhZDljYTYzMTIzOCIsImRldmljZUlkIjoiNWU4YjIzZDQtZDc3MC00NTMzLThmNDUtYzU5MTI4NDFkYzQ3In0=', 'brokerEndpoint': ' ', 'brokerIndex': -1, 'mac': '4C:C6:4C:E4:4B:B8', 'ssid': ''}] [2026-09-16 21:41:21] [0.6.1] [INFO] device_player.py:1142: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:41:21] [0.6.1] [INFO] device_player.py:1149: get_volume. volume:68 [2026-09-16 21:41:33] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:41:33] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:41:33] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 稻香, type: music [2026-09-16 21:41:33] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 21:41:33] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:33] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566093502"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566093502: True [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 稻香, type: music [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566094204"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566094204: True [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 19 results [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 音悦台 for keyword: 稻香, type: music [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 音悦台 [2026-09-16 21:41:34] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 音悦台 not found [2026-09-16 21:41:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u97f3\u60a6\u53f0", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566094813"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566094813: False [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 音悦台: Plugin 音悦台 not found [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 音悦台 not found', 'id': 'msg_1789566094813'} [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 稻香, type: music [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 21:41:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566095027"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566095027: False [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789566095027'} [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 稻香, type: music [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 21:41:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566095230"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566095230: False [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789566095230'} [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 稻香, type: music [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 21:41:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566095435"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566095435: False [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789566095435'} [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 稻香, type: music [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 21:41:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566095638"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566095638: False [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789566095638'} [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 稻香, type: music [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 21:41:35] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566095843"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566095843: False [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789566095843'} [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 稻香, type: music [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 21:41:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566096047"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566096047: False [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789566096047'} [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 稻香, type: music [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 21:41:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566096252"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566096252: False [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789566096252'} [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 稻香, type: music [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '稻香', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u7a3b\u9999", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566096457"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566096457: False [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 21:41:36] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789566096457'} [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Search failed: Plugin 音悦台 not found [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:36] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 21:41:36] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': 'xrW8DNf8SZI', 'title': '稻香 Dao Xiang - 周杰倫 Jay Chou (Cover by 悠然YOU) |回到最初的美好 🌾', 'artist': 'AMAO Music', 'artwork': 'https://i.ytimg.com/vi/xrW8DNf8SZI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD3zVxpLgTGK7V5evS8-k0zh6deig', 'platform': 'Youtube'}, {'id': 'YD9NOeQnjng', 'title': '稻香-周杰伦-pianoman苏阳', 'artist': 'Elie苏阳', 'artwork': 'https://i.ytimg.com/vi/YD9NOeQnjng/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYWCBgKGUwDw==&rs=AOn4CLBrrurIC1ndT-z_45zGd1_M-6vzVQ', 'platform': 'Youtube'}, {'id': 'BV1Ki4y1y7HC', 'aid': 552315351, 'bvid': 'BV1Ki4y1y7HC', 'artist': '音乐私藏馆', 'title': '【私藏馆】周杰伦《稻香》超治愈神作!希望疫情早点过去', 'alias': '稻香', 'album': 'BV1Ki4y1y7HC', 'artwork': 'http://i1.hdslb.com/bfs/archive/86f0a7859d770f53225b942743374a8431dd2a41.jpg', 'duration': 223, 'tags': ['稻香', '音乐私藏馆', '疫情', '爷青回', '励志', '周杰伦', '开口跪', '华语MV', '治愈'], 'date': '2022-03-15', 'platform': 'bilibili'}, {'id': 'BV1bRQBBDEKJ', 'aid': 116283773360812, 'bvid': 'BV1bRQBBDEKJ', 'artist': 'jade云朵', 'title': '【单曲循环】|《稻香》“还记得你说家是唯一的城堡 随着稻香河流继续奔跑”', 'alias': '稻香', 'album': 'BV1bRQBBDEKJ', 'artwork': 'http://i2.hdslb.com/bfs/archive/89b67b16dba250e540b43808b6407f818f500623.jpg', 'duration': 2436, 'tags': ['电台新星征集令', '歌单', '音乐推荐', '稻香', '高音质', '循环', '周杰伦'], 'date': '2026-03-24', 'platform': 'bilibili'}, {'id': 'BV13XYu6eEyT', 'aid': 117246248617234, 'bvid': 'BV13XYu6eEyT', 'artist': '我是优优YOYO', 'title': '“还记得你说家是唯一的城堡”‖周杰伦《稻香》,小学生无限循环单曲', 'alias': '稻香', 'album': 'BV13XYu6eEyT', 'artwork': 'http://i1.hdslb.com/bfs/archive/d33fda7e54070fb712e9ce881f19e7097b9ca752.jpg', 'duration': 223, 'tags': ['全能音乐挑战赛', '稻香', '全民K歌', '学生党', '自习', '唱歌', '周杰伦', '治愈', '小学生'], 'date': '2026-09-10', 'platform': 'bilibili'}, {'id': 'BV1Qyt6zQEG9', 'aid': 114988823878223, 'bvid': 'BV1Qyt6zQEG9', 'artist': 'VV音乐局', 'title': '【𝐇𝐢-𝐑𝐞𝐬无损音质】|《稻香》- 周杰伦 -‘还记得你说家是唯一的城堡’', 'alias': '稻香', 'album': 'BV1Qyt6zQEG9', 'artwork': 'http://i2.hdslb.com/bfs/archive/2b92522778ec328344314f40559e46162163a3c8.jpg', 'duration': 224, 'tags': ['无损音质', '耳机', '周杰伦', 'HIFI', '音响', '音质', '稻香', '音箱', '音乐分享官', '歌曲'], 'date': '2025-08-12', 'platform': 'bilibili'}, {'id': 'BV13G411Q76u', 'aid': 408217120, 'bvid': 'BV13G411Q76u', 'artist': '云端音乐铺', 'title': '“回到最初的美好吧~”—《稻香》', 'alias': '稻香', 'album': 'BV13G411Q76u', 'artwork': 'http://i1.hdslb.com/bfs/archive/315aeb9cad16dc7beb301f4e79ececdbdfdb42d1.jpg', 'duration': 224, 'tags': ['高音质', '音乐分享官', '治愈', '音乐玩家招募令第三期', '周杰伦', '循环歌曲'], 'date': '2023-11-11', 'platform': 'bilibili'}, {'id': 'BV1RMGKzsEEf', 'aid': 114825799731738, 'bvid': 'BV1RMGKzsEEf', 'artist': '如歌如梦', 'title': '【4K Hi-Res】稻香-周杰伦', 'album': 'BV1RMGKzsEEf', 'artwork': 'http://i0.hdslb.com/bfs/archive/e67ecbe49ed5c7cce383bcae9c7869f63f28f9af.jpg', 'duration': 224, 'tags': ['无损音质', '听歌', '4k', '稻香', '黑胶唱片', '音乐', '周杰伦', '动态歌词', '音乐4K计划'], 'date': '2025-07-10', 'platform': 'bilibili'}, {'id': 'BV16eYu62Ern', 'aid': 117246450010883, 'bvid': 'BV16eYu62Ern', 'artist': '4K臻彩映画', 'title': '【4K极致修复丨Hi-Res无损】周杰伦 - 稻香 MV 歌词重制', 'album': 'BV16eYu62Ern', 'artwork': 'http://i0.hdslb.com/bfs/archive/175bdc6ba824428529e0a2e99ab5e0e47303a381.jpg', 'duration': 224, 'tags': ['音乐4K计划', '国语MV', '4K修复', '魔杰座', '华语MV', '4K', '稻香', '高音质', '周杰伦', 'MV'], 'date': '2026-09-11', 'platform': 'bilibili'}, {'id': 'BV1zu41167dZ', 'aid': 511641263, 'bvid': 'BV1zu41167dZ', 'artist': '索性自挂东南枝', 'title': '【杜比音效】周杰伦《稻香》「还记得你说家是唯一的城堡 随着稻香河流继续奔跑」动态歌词', 'alias': '稻香', 'album': 'BV1zu41167dZ', 'artwork': 'http://i1.hdslb.com/bfs/archive/19a2b363a1d418f8e089acd9f43c423bb17c75c8.jpg', 'duration': 224, 'tags': ['稻香', '索性自挂东南枝', '开口跪', '周杰伦', '音乐可视化', '自制', '杜比音效', '听歌', '精选歌单', '4K'], 'date': '2022-05-18', 'platform': 'bilibili'}, {'id': 'BV1YMtJ62E85', 'aid': 117201000535827, 'bvid': 'BV1YMtJ62E85', 'artist': '十月Free-music', 'title': '《稻香》周杰伦丨百万级录音棚试听丨【Hi-Res无损】', 'alias': '稻香', 'album': 'BV1YMtJ62E85', 'artwork': 'http://i0.hdslb.com/bfs/archive/401092647825de36752317ca45d0d3917b3b1ed5.jpg', 'duration': 216, 'tags': ['全能音乐挑战赛', 'Hi-fi', 'Hi-res', '稻香', '高音质', '电台', '周杰伦', '录音棚', '音响'], 'date': '2026-09-02', 'platform': 'bilibili'}, {'id': 'BV17deW6QEDv', 'aid': 117276330171947, 'bvid': 'BV17deW6QEDv', 'artist': 'GYC-高云辞', 'title': '“微微笑,小时候的梦我知道!”《稻香》MV完整版', 'alias': '稻香', 'album': 'BV17deW6QEDv', 'artwork': 'http://i1.hdslb.com/bfs/archive/32a56fa309ecfdd72af8d3ac08abcfb8dddcaafa.jpg', 'duration': 218, 'tags': ['歌单', '稻香', '完整版', '周杰伦', '猜你喜欢的歌', '每日歌曲', '田园风光', '单曲', 'MV'], 'date': '2026-09-16', 'platform': 'bilibili'}, {'id': 'BV1V4411k7RJ', 'aid': 65224490, 'bvid': 'BV1V4411k7RJ', 'artist': '揉揉酱Violin', 'title': '【小提琴/揉揉酱】这是一首让人值得回忆的歌《稻香》', 'alias': '稻香', 'album': 'BV1V4411k7RJ', 'artwork': 'http://i0.hdslb.com/bfs/archive/bd53cfd4797d09a9e5598aa672c0fb2ead9f046b.jpg', 'duration': 232, 'tags': ['周杰伦', '纯音乐', '华语', '小提琴', '稻香', '全民音乐UP主', '合奏', '翻弹', '日常', '音乐'], 'date': '2019-08-25', 'platform': 'bilibili'}, {'id': 'BV1Em421K77M', 'aid': 1604876289, 'bvid': 'BV1Em421K77M', 'artist': '上岸音乐馆', 'title': '【无损Hi-Res】周杰伦《稻香》“还记得 你说家是唯一的城堡,随着稻香河流继续奔跑,微微笑,小时候的梦我知道”-4K', 'alias': '稻香', 'album': 'BV1Em421K77M', 'artwork': 'http://i0.hdslb.com/bfs/archive/3bc3a37a911642d1aa1646ffb6e51a18b1f83715.jpg', 'duration': 224, 'tags': ['必剪创作', '音乐推荐', '治愈', '音乐分享官', '好听', '治愈向', '稻香', '音乐', '循环', '周杰伦', '音乐分享官第九期'], 'date': '2024-05-23', 'platform': 'bilibili'}, {'id': 'BV1iuTj6dEtJ', 'aid': 116849853337990, 'bvid': 'BV1iuTj6dEtJ', 'artist': '妙手回春杨某人', 'title': '这才是《稻香》原版MV!', 'alias': '稻香', 'album': 'BV1iuTj6dEtJ', 'artwork': 'http://i0.hdslb.com/bfs/archive/c1975f54447d98c2161c313216265e19b03a88d0.jpg', 'duration': 201, 'tags': ['华语MV', '稻香', '周杰伦', 'MV', '音乐小剧场', '音乐混剪', '熊出没', '音乐MV'], 'date': '2026-07-03', 'platform': 'bilibili'}, {'id': 'BV11F8dzRE9N', 'aid': 114937418486430, 'bvid': 'BV11F8dzRE9N', 'artist': '不用去猜ay', 'title': '周杰伦《稻香》完整版无损音质', 'alias': '稻香', 'album': 'BV11F8dzRE9N', 'artwork': 'http://i2.hdslb.com/bfs/archive/9f6cc293b67d1f4cb0687da55e77d7bb91bced68.jpg', 'duration': 224, 'tags': ['周杰伦稻香', '无损音质', '稻香', '周杰伦'], 'date': '2025-07-30', 'platform': 'bilibili'}, {'id': 'BV1cZ4y1z7Ee', 'aid': 382648050, 'bvid': 'BV1cZ4y1z7Ee', 'artist': 'Sky光遇琴谱_瞳', 'title': '【sky光遇】稻香 周杰伦 高度还原完整版 买断谱 语瞳原创sky studio', 'album': 'BV1cZ4y1z7Ee', 'artwork': 'http://i1.hdslb.com/bfs/archive/8b182fa5a1a92a2e4ff6c7dfcd3f7746ee08e30f.jpg', 'duration': 194, 'tags': ['稻香', '周杰伦', '还原', '光遇', '万物皆可游戏', '自制谱'], 'date': '2022-03-28', 'platform': 'bilibili'}, {'id': 'BV1ha4y1r7y4', 'aid': 664915579, 'bvid': 'BV1ha4y1r7y4', 'artist': '这里是小啦A梦', 'title': '【稻香——周杰伦】', 'album': 'BV1ha4y1r7y4', 'artwork': 'http://i2.hdslb.com/bfs/archive/d8b48df115d49bfd05f48ed023a4b73b17335905.jpg', 'duration': 224, 'tags': ['音乐分享官', '歌曲', '必剪创作', '音乐玩家招募令第三期'], 'date': '2023-12-18', 'platform': 'bilibili'}, {'id': 'BV1PK411678z', 'aid': 476525083, 'bvid': 'BV1PK411678z', 'artist': '拾荒音乐人', 'title': '零基础吉他《稻香》30秒就学会', 'alias': '稻香', 'album': 'BV1PK411678z', 'artwork': 'http://i2.hdslb.com/bfs/archive/9ba6144abac12277cb274041493b7fe8399af234.jpg', 'duration': 130, 'tags': ['零基础', '吉他教程', '吉他弹唱'], 'date': '2022-12-20', 'platform': 'bilibili'}, {'id': 'BV1m94y1d7DT', 'aid': 340687474, 'bvid': 'BV1m94y1d7DT', 'artist': '往返跑_', 'title': '谁能拒绝一首《稻香》呢,戴上耳机', 'alias': '稻香', 'album': 'BV1m94y1d7DT', 'artwork': 'http://i1.hdslb.com/bfs/archive/89e36b4f39b630a1436cc141a39bce073cf78145.jpg', 'duration': 224, 'tags': ['周杰伦', '你的名字', '治愈', '跟着UP主创作吧(第三期)', '耳机', '稻香', '那些年我们听过的洗脑神曲'], 'date': '2022-04-12', 'platform': 'bilibili'}, {'id': 'BV1sW411s7nW', 'aid': 20649460, 'bvid': 'BV1sW411s7nW', 'artist': '吉岛音乐', 'title': '看这群小朋友用杯子敲出儿时的《稻香》', 'alias': '稻香', 'album': 'BV1sW411s7nW', 'artwork': 'http://i0.hdslb.com/bfs/archive/bbce67310a64e4e9ceb809a0a0c50ab3c09ebe59.jpg', 'duration': 131, 'tags': ['阿卡贝拉', 'cup song', '翻唱', '厦门六中合唱团', '杯子歌', '周杰伦', '稻香'], 'date': '2018-03-11', 'platform': 'bilibili'}, {'id': 'sHD_z90ZKV0', 'title': '周杰倫 Jay Chou【稻香 Rice Field】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/sHD_z90ZKV0/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYfyBNKBMwDw==&rs=AOn4CLB5KCGVZ5GVnpHhF0ASALhzT5F2Cg', 'platform': 'Youtube'}, {'id': 'IgpAUdCPKK8', 'title': '【稻香 Rice Field】周杰倫 Jay Chou《歌詞》', 'artist': 'kiki lyrics', 'artwork': 'https://i.ytimg.com/vi/IgpAUdCPKK8/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBHY9eENIklif2x96INULYh-KLFqg', 'platform': 'Youtube'}, {'id': 'gCKiA_P9kRw', 'title': '周杰倫 稻香 歌詞', 'artist': '龔子歆', 'artwork': 'https://i.ytimg.com/vi/gCKiA_P9kRw/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD5WU4O3MZlHrwOpITuqcxbpc27-w', 'platform': 'Youtube'}, {'id': '6p1U_mkYMzw', 'title': '于文文 - 稻香 无杂音,无重复版', 'artist': 'Jacky Chin', 'artwork': 'https://i.ytimg.com/vi/6p1U_mkYMzw/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLADPRreufTLOxH-CYsRtp5-seqv5Q', 'platform': 'Youtube'}, {'id': '4dIiSXT8oYk', 'title': '周杰倫 JAY CHOU & 五月天 MAYDAY【稻香 搖滾版】', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/4dIiSXT8oYk/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDMkBg5XeyDZJ6qcFB7GjTXcTwc8g', 'platform': 'Youtube'}, {'id': 'Ajgl8qqo0T8', 'title': '看这群小朋友用杯子敲出儿时的《稻香》', 'artist': '吉岛音乐', 'artwork': 'https://i.ytimg.com/vi/Ajgl8qqo0T8/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDyqfb-ld9lhmtEfgg6suRUlvy4Gw', 'platform': 'Youtube'}, {'id': 'vdyXuvYnKpc', 'title': "【周杰倫地表最強演唱會LIVE-稻香】 Jay Chou's The Invincible Concert LIVE (Rice Field)", 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/vdyXuvYnKpc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAXF9b54azos6XL8Yb4Gdn9blt-Tg', 'platform': 'Youtube'}, {'id': 'UGIyfZE4QKE', 'title': '聲生不息 寶島季 |第11集 |張信哲隊六人合唱《 稻香 》 溫馨齊憶兒時快樂|張信哲 |莫文蔚 |楊宗緯 |張韶涵 |張杰 |MCHotdog熱狗 |稻香 |周杰倫', 'artist': 'TVB 綜藝 ', 'artwork': 'https://i.ytimg.com/vi/UGIyfZE4QKE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD9myEE_ViKvwCd1gNr9h53bXnHag', 'platform': 'Youtube'}, {'id': 'bVmBREuYe-k', 'title': '[ 现场 𝐋𝐈𝐕𝐄 💿] 韩语版,周杰伦 《稻香》 前奏一响 青春就回来了|Toyota 高都汽车 X OUBA MUSIC', 'artist': 'OUBA MUSIC 오뮤', 'artwork': 'https://i.ytimg.com/vi/bVmBREuYe-k/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAkQbAE0pfqhrKqUT3Dc2HTOHc7QA', 'platform': 'Youtube'}, {'id': 'rCT0zSWaEZI', 'title': '周杰倫 & 林俊傑 《稻香》+《Stay With You》', 'artist': 'JJ Lin林俊傑', 'artwork': 'https://i.ytimg.com/vi/rCT0zSWaEZI/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Ac4FgAL-CYoCDAgAEAEYZSBdKFUwDw==&rs=AOn4CLApsYJVzhZGnzejXsP1RZvV022wxw', 'platform': 'Youtube'}, {'id': '89kR1jj7m2w', 'title': '青春好聲音!阿卡貝拉版《稻香》\u3000國中生「無伴奏合唱」超清爽|三立新聞網SETN.com', 'artist': '三立新聞網SETN', 'artwork': 'https://i.ytimg.com/vi/89kR1jj7m2w/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD3nTOk1v2Tqmtp7DBo_Gngc_uzaw', 'platform': 'Youtube'}, {'id': 'AnmSt98PDak', 'title': '【青春版】九三《稻香》(原唱:周杰倫)青春又治愈的嗓音,聽了整個人心情都好了【#華語人氣排行榜|#選最佳抒情歌】', 'artist': '華語歌曲', 'artwork': 'https://i.ytimg.com/vi/AnmSt98PDak/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBNO1OVZbqXxMGXfufvYj0nOUvFpA', 'platform': 'Youtube'}, {'id': 'bzfXHVPu3VM', 'title': '耳朵怀孕——温柔女生版《稻香》一秒爱上', 'artist': '板凳音乐', 'artwork': 'https://i.ytimg.com/vi/bzfXHVPu3VM/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCJmRqfAuiCCLBrmO7V7eLl1N4B0Q', 'platform': 'Youtube'}, {'id': 'eJLqHg7dOkM', 'title': '周杰倫---稻香+陽光宅男+龍卷風+說好的幸福呢+淘汰+青花瓷', 'artist': '一夜暴富', 'artwork': 'https://i.ytimg.com/vi/eJLqHg7dOkM/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYZSBTKFwwDw==&rs=AOn4CLBn8ir4TSS0XVAE-K1jpNY6PK-_tw', 'platform': 'Youtube'}, {'id': '_8OdiGdWJec', 'title': '周杰倫 JAY CHOU【稻香Remix搖滾版 Rice Field Rock Remix】Official MV', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/_8OdiGdWJec/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDLRHrnA92ik6jz4tNoswn4esdGYQ', 'platform': 'Youtube'}, {'id': 'Bz4q0QwJr2o', 'title': '【辱包】🌾麦香 Wheat Field(原曲:稻香 - 周杰伦)', 'artist': '乳透社·小反旗', 'artwork': 'https://i.ytimg.com/vi/Bz4q0QwJr2o/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA5dH4pfD5PFouhfaXXRxsNbc9Jvw', 'platform': 'Youtube'}, {'id': 'L-ne6_vXWm0', 'title': '【纯享版】一群中学生用杯子敲出《稻香》周杰伦都惊呆了!《2018春季盛典》/浙江卫视官方HD/', 'artist': '浙江卫视音乐频道 ZJSTV Music Channel - 欢迎订阅 -', 'artwork': 'https://i.ytimg.com/vi/L-ne6_vXWm0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAaPaZB8DNYzvDJah53l_CkesWp1g', 'platform': 'Youtube'}, {'id': 'BV1r3426vEkd', 'aid': 117178820990875, 'bvid': 'BV1r3426vEkd', 'artist': 'stars_雨', 'title': '🐧稻凑鹅企🐧', 'album': 'BV1r3426vEkd', 'artwork': 'http://i2.hdslb.com/bfs/archive/f5790bbebbaa0543b13a356d4524d73a6681dec8.jpg', 'duration': 23, 'tags': ['凑企鹅', '稻香', '动画种草激励计划', '高松灯', 'mygo', '咕咕嘎嘎', '抽象'], 'date': '2026-08-29', 'platform': 'bilibili'}] [2026-09-16 21:41:49] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:41:49] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:41:49] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 晴天, type: music [2026-09-16 21:41:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 21:41:49] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566109944"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:50] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566109944: True [2026-09-16 21:41:50] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 21:41:50] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 晴天, type: music [2026-09-16 21:41:50] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 21:41:50] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566110245"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566110245: True [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 19 results [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 音悦台 for keyword: 晴天, type: music [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 音悦台 [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u97f3\u60a6\u53f0", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566111047"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 音悦台 not found [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566111047: False [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 音悦台: Plugin 音悦台 not found [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 音悦台 not found', 'id': 'msg_1789566111047'} [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 晴天, type: music [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566111250"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566111250: False [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789566111250'} [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 晴天, type: music [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566111454"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566111454: False [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789566111454'} [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 晴天, type: music [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566111658"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566111658: False [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789566111658'} [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 晴天, type: music [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 21:41:51] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566111862"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566111862: False [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789566111862'} [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 晴天, type: music [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:52] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566112066"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566112066: False [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789566112066'} [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 晴天, type: music [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:52] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566112271"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566112271: False [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789566112271'} [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 晴天, type: music [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:52] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566112476"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566112476: False [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789566112476'} [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 晴天, type: music [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:41:52] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566112681"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566112681: False [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 21:41:52] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789566112681'} [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Search failed: Plugin 音悦台 not found [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:41:52] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 21:41:52] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': '3-DteAHyRnI', 'title': '晴天 周杰伦 (歌词版)', 'artist': 'GM Lyric', 'artwork': 'https://i.ytimg.com/vi/3-DteAHyRnI/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDre7urCqtAswSny8dpzGGpdR5pIA', 'platform': 'Youtube'}, {'id': 'V1H616wjd3A', 'title': '晴天|抒情R&B|深情对唱|消失的下雨天我好想再淋一遍', 'artist': '格雷乐团-Grey和艾尔-EL', 'artwork': 'https://i.ytimg.com/vi/V1H616wjd3A/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCZG7zO1Tr06kw1QqBlnTtj--RIcg', 'platform': 'Youtube'}, {'id': '8tnWBe0DQ0U', 'title': '晴天 - 周杰倫 | R&B Ballad Remix 女聲版 | 【從前從前 有個人愛妳很久 但偏偏 風漸漸 把距離吹得好遠】', 'artist': '音樂迷航地圖', 'artwork': 'https://i.ytimg.com/vi/8tnWBe0DQ0U/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAj_eVKcSVwfpwXdmMRsFs_k9-6YA', 'platform': 'Youtube'}, {'id': 'TBzHhGsxrGc', 'title': '晴天(女生版)(Cover 欧阳耀莹) -...', 'artist': '方苏艳 - Topic', 'artwork': 'https://i.ytimg.com/vi/TBzHhGsxrGc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCygluAd7ZVsyE0V9p9ykJE7H3_3g', 'platform': 'Youtube'}, {'id': 'BV1BZbSzZEGT', 'aid': 114912554719208, 'bvid': 'BV1BZbSzZEGT', 'artist': 'VV音乐局', 'title': '【𝐇𝐢-𝐑𝐞𝐬无损音质】|《晴天》- 周杰伦 -‘故事的小黄花’', 'alias': '晴天', 'album': 'BV1BZbSzZEGT', 'artwork': 'http://i0.hdslb.com/bfs/archive/b72e06e408b1636bb9ca8df55a171e44d6ba1702.jpg', 'duration': 270, 'tags': ['高音质', '晴天', '耳机', 'HIFI', '周杰伦', '无损音质', '我的日推歌单安利'], 'date': '2025-07-28', 'platform': 'bilibili'}, {'id': 'BV1d4411N7zD', 'aid': 55185686, 'bvid': 'BV1d4411N7zD', 'artist': 'zyl2012_音乐无限', 'title': '【4K修复】周杰伦 - 晴天MV 2160P修复版', 'album': 'BV1d4411N7zD', 'artwork': 'http://i1.hdslb.com/bfs/archive/6770f3a7d60f21469194251726588cee3b8bdb45.jpg', 'duration': 317, 'tags': ['青春', '周董', '小公举', '华语MV', 'JAY', '叶惠美', '4K', '童年回忆', '周杰伦'], 'date': '2019-06-10', 'platform': 'bilibili'}, {'id': 'BV11TYd6DEF3', 'aid': 117258076556872, 'bvid': 'BV11TYd6DEF3', 'artist': '千百万录音室', 'title': '周杰伦《晴天》超高音质', 'alias': '晴天', 'album': 'BV11TYd6DEF3', 'artwork': 'http://i1.hdslb.com/bfs/archive/58ba86f21b8eaace2882d187cf4aa4c49c3dcc8a.jpg', 'duration': 270, 'tags': ['晴天', '音质', '耳机', '高音质', '周杰伦', '治愈'], 'date': '2026-09-12', 'platform': 'bilibili'}, {'id': 'BV14PtPz5E6C', 'aid': 114981911727491, 'bvid': 'BV14PtPz5E6C', 'artist': 'Echo丶诗别', 'title': '循环歌曲《晴天》|"刮风这天我试过握着你手 但偏偏雨渐渐大到我看你不见"|', 'alias': '晴天', 'album': 'BV14PtPz5E6C', 'artwork': 'http://i2.hdslb.com/bfs/archive/fc450df1aa51b6387fbbf4319dbe237b3811dbcd.jpg', 'duration': 2422, 'tags': ['戴上耳机', '循环歌曲', '听歌', '电台新星征集令', '宝藏歌曲', '周杰伦', '无损音质', '晴天', '音乐推荐', '经典'], 'date': '2025-08-06', 'platform': 'bilibili'}, {'id': 'BV1nnWFzGEJQ', 'aid': 115240045909995, 'bvid': 'BV1nnWFzGEJQ', 'artist': '寻意zzzz', 'title': '周杰伦——《晴天》', 'alias': '晴天', 'album': 'BV1nnWFzGEJQ', 'artwork': 'http://i1.hdslb.com/bfs/archive/6190f20921a6f9c09f7992f183285961dd421bcc.jpg', 'duration': 267, 'tags': ['直播', '录屏', '记录'], 'date': '2025-09-22', 'platform': 'bilibili'}, {'id': 'BV1k1Gcz9ETR', 'aid': 114822226117076, 'bvid': 'BV1k1Gcz9ETR', 'artist': '如歌如梦', 'title': '【4K Hi-Res】晴天-周杰伦', 'album': 'BV1k1Gcz9ETR', 'artwork': 'http://i1.hdslb.com/bfs/archive/7cd9aeaeaa0bf2341551463ca90e8e47cbff0a62.jpg', 'duration': 270, 'tags': ['听歌', '周杰伦', '动态歌词', '4k', '无损音质', '黑胶唱片', '音乐', '晴天', '音乐4K计划'], 'date': '2025-07-09', 'platform': 'bilibili'}, {'id': 'BV1uk4y1x7yJ', 'aid': 741524534, 'bvid': 'BV1uk4y1x7yJ', 'artist': '烤鱼老椰', 'title': '【从前从前有个人爱你很久】周杰伦-晴天MV', 'album': 'BV1uk4y1x7yJ', 'artwork': 'http://i2.hdslb.com/bfs/archive/9821243a0d1a11538ffc9c384844ca1d5fe0650c.jpg', 'duration': 269, 'tags': ['周杰伦', 'MV', '晴天', '青春'], 'date': '2023-05-24', 'platform': 'bilibili'}, {'id': 'BV1uw5Jz9EmK', 'aid': 114358872969869, 'bvid': 'BV1uw5Jz9EmK', 'artist': '划水的三', 'title': '《晴天》—“故事的小黄花,从出生那年就飘着”', 'alias': '晴天', 'album': 'BV1uw5Jz9EmK', 'artwork': 'http://i2.hdslb.com/bfs/archive/745ba4e2581ff26b1705eda1ab84a76ae3b9b961.jpg', 'duration': 269, 'tags': ['动漫二创激励计划·国漫季', '二次元', '剪辑', '四月是你的谎言', '动漫二创激励计划', '晴天', '周杰伦'], 'date': '2025-04-18', 'platform': 'bilibili'}, {'id': 'BV1qTbn6FE2T', 'aid': 117222424970594, 'bvid': 'BV1qTbn6FE2T', 'artist': '音乐盲盒Plus', 'title': '周杰伦十大神仙前奏《花海》《稻香》《晴天》《夜曲》《青花瓷》《七里香》《以父之名》《夜的第七章》', 'alias': '花海', 'album': 'BV1qTbn6FE2T', 'artwork': 'http://i2.hdslb.com/bfs/archive/dc52ee5e44af6b8e0b7570df0b15c3068ca8841d.jpg', 'duration': 2175, 'tags': ['电台新星征集令', '宝藏歌曲', '音乐歌单', '歌单', '经典老歌', '精选音乐', '流行歌曲', '电台', '周杰伦', '音乐'], 'date': '2026-09-10', 'platform': 'bilibili'}, {'id': 'BV1Yv4y1Z7km', 'aid': 544148195, 'bvid': 'BV1Yv4y1Z7km', 'artist': '音乐私藏馆', 'title': '【4K60FPS】周杰伦《晴天》神级现场!祝大家新年快乐!', 'alias': '晴天', 'album': 'BV1Yv4y1Z7km', 'artwork': 'http://i2.hdslb.com/bfs/archive/fd3eee1c3257e85941ee86f5123b83366fa3bf0d.jpg', 'duration': 265, 'tags': ['经典', '华语现场', '4K', '周杰伦', '晴天', '春节', '召唤新年欧气', '周杰伦演唱会', '青春', '音乐私藏馆'], 'date': '2021-02-11', 'platform': 'bilibili'}, {'id': 'BV1wZAizcEKP', 'aid': 116151988262187, 'bvid': 'BV1wZAizcEKP', 'artist': '妙手回春杨某人', 'title': '这才是《晴天》原版MV!', 'alias': '晴天', 'album': 'BV1wZAizcEKP', 'artwork': 'http://i0.hdslb.com/bfs/archive/13f837c5d859ff232002310bba5e402de1cd742a.jpg', 'duration': 267, 'tags': ['华语MV', '晴天', '音乐MV制作大赛', '音乐混剪', '熊出没', '音乐MV', '周杰伦', 'MV'], 'date': '2026-03-01', 'platform': 'bilibili'}, {'id': 'BV1xy6qBJESW', 'aid': 115983964571192, 'bvid': 'BV1xy6qBJESW', 'artist': '鸡鸡·夫斯基', 'title': '《晴天》', 'alias': '晴天', 'album': 'BV1xy6qBJESW', 'artwork': 'http://i1.hdslb.com/bfs/archive/e6535b1924d492bf262034cfe63f4916c32346e4.jpg', 'duration': 126, 'tags': ['失禁', '雷霆', '低音炮', '鬼畜', '丹尼尔', '抽象', '神人'], 'date': '2026-01-30', 'platform': 'bilibili'}, {'id': 'BV1FGe56cEqw', 'aid': 117269837384521, 'bvid': 'BV1FGe56cEqw', 'artist': '遗忘的细糠', 'title': '【千禧金曲·2003】【4K珍藏】周杰伦·晴天| 周杰伦写《晴天》竟是为了劝你表白?', 'alias': '晴天', 'album': 'BV1FGe56cEqw', 'artwork': 'http://i1.hdslb.com/bfs/archive/e32ba6969403864ec61bc0619ef56f6b328eec50.jpg', 'duration': 318, 'tags': ['ktv必唱歌曲', '音乐分享官', '华语MV', '晴天', '周杰伦', '青春', '创作灵感', '华语乐坛', '金曲', '经典'], 'date': '2026-09-14', 'platform': 'bilibili'}, {'id': 'BV1U44y1G7a6', 'aid': 980938098, 'bvid': 'BV1U44y1G7a6', 'artist': '索性自挂东南枝', 'title': '【杜比音效】周杰伦《晴天》4K「刮风这天我试过握着你手 但偏偏雨渐渐大到我看你不见」动态歌词', 'alias': '晴天', 'album': 'BV1U44y1G7a6', 'artwork': 'http://i0.hdslb.com/bfs/archive/76c0f6db1c80408e9d0d0b2e2fd2533cb23b8feb.jpg', 'duration': 270, 'tags': ['周杰伦', '开口跪', '音乐可视化', '听歌', '4K', '精选歌单', '杜比音效', '索性自挂东南枝', '晴天', '自制'], 'date': '2022-04-22', 'platform': 'bilibili'}, {'id': 'BV1MbMbzvEBR', 'aid': 114686582326684, 'bvid': 'BV1MbMbzvEBR', 'artist': '小Q吉他教室', 'title': '史上最详细《晴天》保姆级教学!来啦!!!!!!!!', 'alias': '晴天', 'album': 'BV1MbMbzvEBR', 'artwork': 'http://i0.hdslb.com/bfs/archive/541c2870bbe91b9fefeb0f8e5571eafa78408d69.jpg', 'duration': 2907, 'tags': ['音乐研究所', '吉他入门', '保姆级教学', '周杰伦', '晴天', '音乐分享官第十一期', '吉他弹唱', '吉他教程'], 'date': '2025-06-15', 'platform': 'bilibili'}, {'id': 'BV1hy4y1H7ge', 'aid': 801196590, 'bvid': 'BV1hy4y1H7ge', 'artist': '伟康吉他教室', 'title': '《晴天》详细的指弹教学 | 这么简单确定你不学?', 'alias': '晴天', 'album': 'BV1hy4y1H7ge', 'artwork': 'http://i2.hdslb.com/bfs/archive/c63ad1d30aa81fd97dfa2a459a55c3256f770ab9.jpg', 'duration': 1472, 'tags': ['指弹吉他', '晴天', '打卡挑战', '必剪创作', '吉他谱', '音乐', '教学', '周杰伦', '吉他教学'], 'date': '2021-01-17', 'platform': 'bilibili'}, {'id': 'BV1iVfxB1E36', 'aid': 116128500155002, 'bvid': 'BV1iVfxB1E36', 'artist': 'GQNI庆', 'title': '周杰伦《晴天》百万声场私人臻享', 'alias': '晴天', 'album': 'BV1iVfxB1E36', 'artwork': 'http://i1.hdslb.com/bfs/archive/9738a82105381d73687647f56673f373502dd3b5.jpg', 'duration': 1636, 'tags': ['晴天', '周杰伦', '电台新星征集令', 'HiFi', '音响'], 'date': '2026-02-25', 'platform': 'bilibili'}, {'id': 'BV1KhYi6eEUY', 'aid': 117264116418013, 'bvid': 'BV1KhYi6eEUY', 'artist': 'vivo', 'title': '手握彩虹,遇见晴天', 'album': 'BV1KhYi6eEUY', 'artwork': 'http://i1.hdslb.com/bfs/archive/2dcfa4a9357937516746c1bec6c9d0338fa5a092.jpg', 'duration': 147, 'tags': ['vivo', '晴天', '视频'], 'date': '2026-09-14', 'platform': 'bilibili'}, {'id': 'DYptgVvkVLQ', 'title': '周杰倫 Jay Chou【晴天 Sunny Day】-Official Music Video', 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/DYptgVvkVLQ/hqdefault.jpg?sqp=-oaymwE9COADEI4CSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4EgALgA4oCDAgAEAEYciBWKEAwDw==&rs=AOn4CLBemXgEUvGj5a2xvlDXBANccHCDOw', 'platform': 'Youtube'}, {'id': 'juQDm2RMqHs', 'title': '周杰伦 - 刘瑞琦 Cover - 晴天 [完整女版]『刮风这天,我试过握着你手,但偏偏,雨渐渐,大到我看你不见。。』【動態歌詞】', 'artist': 'WEN Music Channel', 'artwork': 'https://i.ytimg.com/vi/juQDm2RMqHs/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAr8jmg9hlnp8lKAstcrkfEUgq9uQ', 'platform': 'Youtube'}, {'id': 'JKPVRyg01gg', 'title': "【周杰倫地表最強演唱會LIVE-晴天】 Jay Chou's The Invincible Concert LIVE (Sunny Day)", 'artist': '周杰倫 Jay Chou', 'artwork': 'https://i.ytimg.com/vi/JKPVRyg01gg/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAHsU79kmPJSZ9VpKUVH4Fg4mnoHQ', 'platform': 'Youtube'}, {'id': '1BTXqmgJLVY', 'title': '蓝心羽 (你的叽叽) - 晴天【動態歌詞/Lyrics Video】', 'artist': 'WCY Music Studio', 'artwork': 'https://i.ytimg.com/vi/1BTXqmgJLVY/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC5FMVbib_YxjD1sNYJQ-xyh9O3AA', 'platform': 'Youtube'}, {'id': 'KJ9G7QNcbtY', 'title': '《晴天》| 2025 TOP登陸少年組合•5/5•ONE有引力•演唱會DAY2 250830', 'artist': 'Living', 'artwork': 'https://i.ytimg.com/vi/KJ9G7QNcbtY/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBHm0gjs22sF2A0X2uz4xV2D_F2xw', 'platform': 'Youtube'}, {'id': 'y6uTqg0XjGc', 'title': '周杰倫【2004無與倫比世界巡迴演唱會】晴天 Live修復版', 'artist': 'Jay Pop', 'artwork': 'https://i.ytimg.com/vi/y6uTqg0XjGc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBtLhhXdE3rEnePOsE9oUNTAHal5Q', 'platform': 'Youtube'}, {'id': '3b26e1ehJM0', 'title': '曲肖冰 - 晴天「温柔女聲版 」♪Karendaidai♪', 'artist': 'KarenDaidai Music Channel', 'artwork': 'https://i.ytimg.com/vi/3b26e1ehJM0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAgRko8l-2S9I9npIlQijiLNAqTjA', 'platform': 'Youtube'}, {'id': 'q_g_3Eg3WC8', 'title': '《晴天》 周杰伦 吉他弹唱 希望能唤起大家甜美的回忆!| 启航影音', 'artist': '启航之音', 'artwork': 'https://i.ytimg.com/vi/q_g_3Eg3WC8/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBAnWrDFRna0Y1wh5V2vwbIYcTlvQ', 'platform': 'Youtube'}, {'id': 'K2ojaPyy2xs', 'title': '《黃金直流》晴天林|澳女hyrox 賽中「大便失禁」奪冠(原曲:黃金入球 - 周國賢)', 'artist': '晴天林 SunnyLam', 'artwork': 'https://i.ytimg.com/vi/K2ojaPyy2xs/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDdvJv-Gp5ls-GpujzHa5K8bEfHEQ', 'platform': 'Youtube'}, {'id': 'xrR23SbrnnU', 'title': '📍在韩国路演中文歌|周杰伦 - 晴天|延普罗|OUBA MUSIC', 'artist': 'OUBA MUSIC 오뮤', 'artwork': 'https://i.ytimg.com/vi/xrR23SbrnnU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDsTpXNaKdqk63Pr60ae_X_hDJjNg', 'platform': 'Youtube'}, {'id': 'TOnMkoZdtWk', 'title': '你從來沒有真正聽懂過!藏著遺憾的和弦?MV裡的神秘彩蛋?|周杰倫《晴天》全面分析', 'artist': '凱斯理 Castaly', 'artwork': 'https://i.ytimg.com/vi/TOnMkoZdtWk/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAGUgToXym-g-EAF0LYa9JviivfUA', 'platform': 'Youtube'}, {'id': 'Fpu0RzpjWiA', 'title': '周杰倫《晴天》吉他彈唱 教學 吉他譜 完整版 全曲演奏 伴奏 動態歌詞 (acoustic) Guitar TAB Jay Chou-Sunny Day', 'artist': '大老师乐谱da-tab', 'artwork': 'https://i.ytimg.com/vi/Fpu0RzpjWiA/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA_sQPC-WOL4NTiif2WCGR8uCTA3g', 'platform': 'Youtube'}, {'id': 'ynH9r7shHBg', 'title': '【Piano Cover】Jay Chou周杰倫 - 晴天/Sunny Day|高還原純鋼琴版|高音質/附譜/歌詞', 'artist': 'Nice piano sheets', 'artwork': 'https://i.ytimg.com/vi/ynH9r7shHBg/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAS7cr-99-EO6TTc3nsjanNgVSwxg', 'platform': 'Youtube'}, {'id': 'LfL8hoyLi2s', 'title': '💿 니콜라스 - 晴天(청천)(원곡:주걸륜)커버 가사 Lyrics/한국어 번역', 'artist': '니코가석자', 'artwork': 'https://i.ytimg.com/vi/LfL8hoyLi2s/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDDJ32cQ_wuySil6nwvIW6-AoK6_g', 'platform': 'Youtube'}, {'id': '9oTIyblxQqc', 'title': '于文文弹唱《晴天》独特的沙哑声音唱出了另一种味道', 'artist': 'B&W Black & White', 'artwork': 'https://i.ytimg.com/vi/9oTIyblxQqc/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCCSMVeHRSFBMuGk7sXqMDdRKTM5g', 'platform': 'Youtube'}, {'id': 'BV1FPjy6TEiE', 'aid': 116779154212963, 'bvid': 'BV1FPjy6TEiE', 'artist': '超级爱下雨天', 'title': '【周杰伦】50首精选合集/后台播放/无损音质/HIFI音质/华语流行音乐才是最叼的', 'album': 'BV1FPjy6TEiE', 'artwork': 'http://i0.hdslb.com/bfs/archive/3acdced5472e3db18d3cf861a8cb414247ebed4d.jpg', 'duration': 13348, 'tags': ['流行音乐', '电台', '周杰伦', '电台新星征集令', 'HIFI音质', '周杰伦金曲', '周杰伦MV', '华语流行', '无损音质'], 'date': '2026-06-20', 'platform': 'bilibili'}, {'id': 'BV1SHBjBdE8x', 'aid': 115774702225200, 'bvid': 'BV1SHBjBdE8x', 'artist': '小桃丶Doro', 'title': '【无损音质】“佩戴耳机,精选周杰伦播放破亿歌曲,每首都是时代的巅峰!"', 'album': 'BV1SHBjBdE8x', 'artwork': 'http://i0.hdslb.com/bfs/archive/e9723df2e857b9a22d993b86ce506f0344c0dab1.jpg', 'duration': 2291, 'tags': ['音乐分享官', '热门精选', '晴天', '听歌', '高音质', 'jay', '夜曲', '好听', '周杰伦', '无损音质'], 'date': '2025-12-24', 'platform': 'bilibili'}] [2026-09-16 21:42:08] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:42:08] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:42:08] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 枕着光, type: music [2026-09-16 21:42:08] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 21:42:08] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:08] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566128400"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566128400: True [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 枕着光, type: music [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566129102"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566129102: True [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 19 results [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 音悦台 for keyword: 枕着光, type: music [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 音悦台 [2026-09-16 21:42:09] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 音悦台 not found [2026-09-16 21:42:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u97f3\u60a6\u53f0", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566129904"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566129904: False [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 音悦台: Plugin 音悦台 not found [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 音悦台 not found', 'id': 'msg_1789566129904'} [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 枕着光, type: music [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 21:42:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566130107"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566130107: False [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789566130107'} [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 枕着光, type: music [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 21:42:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566130311"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566130311: False [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789566130311'} [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 枕着光, type: music [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 21:42:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566130515"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566130515: False [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789566130515'} [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 枕着光, type: music [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 21:42:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566130719"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566130719: False [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789566130719'} [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 枕着光, type: music [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 21:42:10] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566130924"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566130924: False [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789566130924'} [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 枕着光, type: music [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 21:42:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566131128"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566131128: False [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789566131128'} [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 枕着光, type: music [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 21:42:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566131333"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566131333: False [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789566131333'} [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 枕着光, type: music [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u6795\u7740\u5149", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566131543"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566131543: False [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 21:42:11] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789566131543'} [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Search failed: Plugin 音悦台 not found [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:11] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 21:42:11] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': 'BV1x6421c7iJ', 'aid': 1351662182, 'bvid': 'BV1x6421c7iJ', 'artist': '海深已蓝', 'title': '枕着光的她官方版伴奏', 'album': 'BV1x6421c7iJ', 'artwork': 'http://i2.hdslb.com/bfs/archive/0d32e59c053ab147b50f8c7e1e63f53a8e9ee00e.jpg', 'duration': 190, 'tags': ['MV', '伴奏'], 'date': '2024-03-13', 'platform': 'bilibili'}, {'id': 'BV1ZD421E7yW', 'aid': 1501799406, 'bvid': 'BV1ZD421E7yW', 'artist': '思思故事', 'title': '枕着光的她李冠老师正背面', 'album': 'BV1ZD421E7yW', 'artwork': 'http://i2.hdslb.com/bfs/archive/758527ca41456f120e4684326a6170ccb02b67af.jpg', 'duration': 369, 'tags': ['老师', '街舞', '舞蹈教程'], 'date': '2024-03-18', 'platform': 'bilibili'}, {'id': 'BV1Ny421a7TT', 'aid': 1550557858, 'bvid': 'BV1Ny421a7TT', 'artist': '电吹海乐', 'title': '枕着光的她', 'album': 'BV1Ny421a7TT', 'artwork': 'http://i1.hdslb.com/bfs/archive/00945c2d6be77ef4c876c578fa37598686f2b244.jpg', 'duration': 191, 'tags': ['歌曲', '简谱'], 'date': '2024-02-13', 'platform': 'bilibili'}, {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'}, {'id': 'BV11C411z7CE', 'aid': 1950263181, 'bvid': 'BV11C411z7CE', 'artist': '最久music', 'title': '2024春晚,任素汐一首《枕着光的她》温馨感人,歌声太治愈了', 'alias': '枕着光的她', 'album': 'BV11C411z7CE', 'artwork': 'http://i0.hdslb.com/bfs/archive/c0f69207b96ec6ad9d65b31d6abe79d3fd6209aa.jpg', 'duration': 169, 'tags': ['春晚', '枕着光的她', '治愈', '温馨', '感人', '新春赏乐纪', '2024春晚', '音乐分享官-新春赏乐纪特别企划', '任素汐', '温暖', '好听'], 'date': '2024-02-10', 'platform': 'bilibili'}, {'id': 'BV1qDJgzoEG5', 'aid': 114528306071205, 'bvid': 'BV1qDJgzoEG5', 'artist': '造梦可汗', 'title': '【Hi-Res无损音质】 任素汐《枕着光的她》这歌原来这么好听 !经典歌曲最好听的版本 4K60P', 'alias': '枕着光的她', 'album': 'BV1qDJgzoEG5', 'artwork': 'http://i1.hdslb.com/bfs/archive/2f89ef6ea39d5a57cddfb4bea5a4d684133a7cc6.jpg', 'duration': 189, 'tags': ['任素汐', 'bgm', '音乐分享官第十一期', '高音质', '音质', '音乐分享官', '无损音质', '黑胶唱片', '主题曲', '华语音乐', '经典歌曲'], 'date': '2025-05-18', 'platform': 'bilibili'}, {'id': 'BV1gXdpYwE6b', 'aid': 114302568629953, 'bvid': 'BV1gXdpYwE6b', 'artist': '六六七七哎', 'title': '《枕着光的她》这舒缓的旋律和浅唱低吟娓娓道来的歌声,温暖且治愈,如春风拂面……人间烟火气,最扶凡人心,在这忙碌喧嚣的世界,唱出了人们心中的向往和美好,愿我们做个', 'alias': '枕着光的她', 'album': 'BV1gXdpYwE6b', 'artwork': 'http://i2.hdslb.com/bfs/archive/072bd8e00d5e85f4396175c12dbbaf1abbd9f8b6.jpg', 'duration': 190, 'tags': ['治愈', '春风', '好听', '音乐玩家招募令第七期', '音乐研究所', '旋律', '世界', '温柔', '歌声', '人间烟火气', '温暖'], 'date': '2025-04-08', 'platform': 'bilibili'}, {'id': 'BV19J4m1a7zT', 'aid': 1251284960, 'bvid': 'BV19J4m1a7zT', 'artist': '天使童声合唱团', 'title': '《枕着光的她》童声版也太治愈了 ,娓娓道来平淡生活里的光', 'alias': '枕着光的她', 'album': 'BV19J4m1a7zT', 'artwork': 'http://i1.hdslb.com/bfs/archive/d93fec002e651d4d5687e88e2a9bd55baa08bddf.jpg', 'duration': 107, 'tags': ['儿歌', '治愈', '童声'], 'date': '2024-03-06', 'platform': 'bilibili'}, {'id': 'BV1dz42197W7', 'aid': 1350948132, 'bvid': 'BV1dz42197W7', 'artist': '大音希声动态谱', 'title': '《枕着光的她》F调动态伴奏谱', 'alias': '枕着光的她', 'album': 'BV1dz42197W7', 'artwork': 'http://i1.hdslb.com/bfs/archive/18e5310a82347b22fa17b91b630c92cad59bf117.jpg', 'duration': 276, 'tags': ['动态谱', '新年音乐狂欢季', '动态伴奏谱', '乐谱', '伴奏'], 'date': '2024-02-20', 'platform': 'bilibili'}, {'id': 'BV1qs2HBBEjZ', 'aid': 115670784153803, 'bvid': 'BV1qs2HBBEjZ', 'artist': '友谊长存友好', 'title': '《枕着光的她》MV任素汐', 'alias': '枕着光的她', 'album': 'BV1qs2HBBEjZ', 'artwork': 'http://i1.hdslb.com/bfs/archive/aff7ab3a3a92b7000949b4c127fc78a33cde4dec.jpg', 'duration': 190, 'tags': ['歌曲', 'MV', '任素汐', '华语MV', '国语MV', '经典'], 'date': '2025-12-06', 'platform': 'bilibili'}, {'id': 'BV1Zm411979c', 'aid': 1900257650, 'bvid': 'BV1Zm411979c', 'artist': '谣-摇', 'title': '官方MV┃任素汐《枕着光的她》┃2024春晚限定', 'alias': '枕着光的她', 'album': 'BV1Zm411979c', 'artwork': 'http://i2.hdslb.com/bfs/archive/7e1a8d1703e222495ae7d7ca8000ffa1812f3d71.jpg', 'duration': 191, 'tags': ['音乐分享官-新春赏乐纪特别企划', '华语MV', '任素汐', '官方MV', '枕着光的她', '音乐分享官', 'MV', '新歌', '民谣', '春晚'], 'date': '2024-02-10', 'platform': 'bilibili'}, {'id': 'BV1ZzD2Y8EuH', 'aid': 113438911170204, 'bvid': 'BV1ZzD2Y8EuH', 'artist': '青葱黛绿1', 'title': '【枕着光的她】原创丽子', 'album': 'BV1ZzD2Y8EuH', 'artwork': 'http://i2.hdslb.com/bfs/archive/6abc98c1e1850c5dde9ee7dc2fef0eee828525ea.jpg', 'duration': 129, 'tags': ['现代舞', '舞蹈翻跳', '当代舞'], 'date': '2024-11-07', 'platform': 'bilibili'}, {'id': 'BV1DC411z7UN', 'aid': 1950311108, 'bvid': 'BV1DC411z7UN', 'artist': '吉他老杨', 'title': '【吉他独奏】枕着光的她(任素汐)', 'album': 'BV1DC411z7UN', 'artwork': 'http://i0.hdslb.com/bfs/archive/2c85813facc978d54f61bf17dc6972231afda77d.jpg', 'duration': 172, 'tags': ['新年音乐狂欢季', '吉他独奏', '任素汐', '吉他指弹', '木吉他', '吉他谱', '吉他教程', '春晚', '吉他老杨'], 'date': '2024-02-10', 'platform': 'bilibili'}, {'id': 'BV14H3azmEBA', 'aid': 114787111406454, 'bvid': 'BV14H3azmEBA', 'artist': '星辰点唱机', 'title': '任素汐《枕着光的她》幸福有时候不说话,总在平凡里发着芽,愿我们都能在岁月的长河中,找到属于自己的那束光与爱同行#音乐#热门音乐#任素汐#枕着光的她@星辰点唱机', 'alias': '枕着光的她', 'album': 'BV14H3azmEBA', 'artwork': 'http://i2.hdslb.com/bfs/archive/7316ffde64c478ccb9c4506bbb814241f2f1e769.jpg', 'duration': 191, 'tags': ['影视音乐', '歌单', '歌曲'], 'date': '2025-07-03', 'platform': 'bilibili'}, {'id': 'BV11iTez3Ern', 'aid': 114652373583431, 'bvid': 'BV11iTez3Ern', 'artist': '茴香菠萝酒', 'title': '【枕着光的她】透过窗看一幕童话 枕着光芒的云下【歌曲分享】温馨治愈的歌', 'album': 'BV11iTez3Ern', 'artwork': 'http://i1.hdslb.com/bfs/archive/4cac99379ea68a4f515647c03aea5f03618e189a.jpg', 'duration': 190, 'tags': ['治愈', '安静', '滚动歌词', '现代', '放松', '温馨', '民谣', '音乐分享官第十一期', '圆满', '音乐分享官'], 'date': '2025-06-30', 'platform': 'bilibili'}, {'id': 'BV19PNGe4EYQ', 'aid': 113967041155721, 'bvid': 'BV19PNGe4EYQ', 'artist': 'DC舞蹈艺术培训中心', 'title': '《枕着光的她》少儿群舞-完整版', 'alias': '枕着光的她', 'album': 'BV19PNGe4EYQ', 'artwork': 'http://i2.hdslb.com/bfs/archive/5251a8b434a7272d8158a8f7d4fee6e676308ebd.jpg', 'duration': 182, 'tags': ['群舞', '春节舞蹈激励计划', '2025哔哩哔哩迎春会', '中国舞', '舞蹈', '舞蹈剧目', '少儿舞蹈'], 'date': '2025-02-08', 'platform': 'bilibili'}, {'id': 'BV1b54teHEAw', 'aid': 113127576375155, 'bvid': 'BV1b54teHEAw', 'artist': '靖菡老师教唱歌', 'title': '如何把这首温馨的《枕着光的她》演唱得更好听?歌曲分析教唱分享', 'alias': '枕着光的她', 'album': 'BV1b54teHEAw', 'artwork': 'http://i2.hdslb.com/bfs/archive/facb3e5a47d8ffe352c4f37613d1a954aae9cb8e.jpg', 'duration': 778, 'tags': ['唱歌技巧', '声乐教学', '流行歌曲教唱', '零基础学唱歌'], 'date': '2024-09-13', 'platform': 'bilibili'}, {'id': 'BV18x4y1C7sY', 'aid': 1001069567, 'bvid': 'BV18x4y1C7sY', 'artist': '革命吉他', 'title': '任素汐《枕着光的她》吉他弹唱教学 带谱子', 'alias': '枕着光的她', 'album': 'BV18x4y1C7sY', 'artwork': 'http://i0.hdslb.com/bfs/archive/439565310f7da926c5a928233f6e01c16f9201d4.jpg', 'duration': 991, 'tags': ['弹唱教学', '吉他弹唱', '任素汐', '吉他', '吉他教程', '民谣吉他', '弹唱', '革命吉他'], 'date': '2024-02-28', 'platform': 'bilibili'}, {'id': 'dsXdEwlUY0Y', 'title': '任素汐在春晚的一首《枕着光的她》一开口幸福的画面就浮现在眼前', 'artist': '酷尚音乐', 'artwork': 'https://i.ytimg.com/vi/dsXdEwlUY0Y/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCUoRvlWLo7_Pj3wALirAjiYRPGJQ', 'platform': 'Youtube'}, {'id': '03gn9EKRjdI', 'title': "Happy mother's Day | 母亲节,用歌声向她传达爱 | 任素汐《枕着光的她》官方动态歌词版MV [4K 60HZ超高清画质]|騰訊音樂雲頻道", 'artist': '腾讯音乐发行', 'artwork': 'https://i.ytimg.com/vi/03gn9EKRjdI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCoFhnElFGxMZVPX0SEm3EGxpdTaQ', 'platform': 'Youtube'}, {'id': 'QQ98JEo145A', 'title': '引发共鸣!任素汐演唱的民谣 #枕着光的她 成为2024年央视春晚最走心的曲目!有唱出你心里的浪漫吗? | TME | 腾讯音乐娱乐', 'artist': 'TME_official', 'artwork': 'https://i.ytimg.com/vi/QQ98JEo145A/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDF6LXcsmlCwFV9IV49gcVzbeiUiQ', 'platform': 'Youtube'}, {'id': '3Cm9MuLhopQ', 'title': '任素汐走心民谣《枕着光的她》唱出心中最温暖的爱情 [2024年春节联欢晚会现场]|騰訊音樂雲頻道', 'artist': '腾讯音乐发行', 'artwork': 'https://i.ytimg.com/vi/3Cm9MuLhopQ/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCOv8DK6jKspkFR6F3NOGPNi5pHIQ', 'platform': 'Youtube'}, {'id': 'HiVSGUCIEh8', 'title': '任素汐 - 枕着光的她 (歌词) 💗♫', 'artist': 'C-Pop MusicClouds', 'artwork': 'https://i.ytimg.com/vi/HiVSGUCIEh8/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBYKDswDw==&rs=AOn4CLCkMmWoDJo_5R3LAPFQiCUL6qUz-g', 'platform': 'Youtube'}, {'id': '3AM4eOeoFpM', 'title': '如何演唱抒情歌曲更好听?《枕着光的她》歌曲分析教唱分享', 'artist': '靖菡教唱歌', 'artwork': 'https://i.ytimg.com/vi/3AM4eOeoFpM/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBwna125iI5vmEEfoNRyWzR5Yt-0w', 'platform': 'Youtube'}, {'id': '-WPrMF9vAlY', 'title': '[乐在旅途第二季]《枕着光的她》 演唱:希林娜依·高|第艺流', 'artist': '第艺流', 'artwork': 'https://i.ytimg.com/vi/-WPrMF9vAlY/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBOKEEwDw==&rs=AOn4CLBbsyumcBYIG_DIoJsaPo1miHmsvg', 'platform': 'Youtube'}, {'id': 'VNprvEmzO-8', 'title': '【枕着光的她】这首歌温暖而感人,生活中需要我们用心去感受和珍惜身边的幸福。', 'artist': '-启航音乐-', 'artwork': 'https://i.ytimg.com/vi/VNprvEmzO-8/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCKKzNf3zs1YDx36bvbfuKyQ26xfQ', 'platform': 'Youtube'}, {'id': 'BV1eYKmzoEdw', 'aid': 114761324825441, 'bvid': 'BV1eYKmzoEdw', 'artist': '风中羽音', 'title': '方大树 灯叔《情难枕》完整版歌曲,两个人的声音竟然如此的像,干净清澈,天籁之音', 'alias': '情难枕', 'album': 'BV1eYKmzoEdw', 'artwork': 'http://i1.hdslb.com/bfs/archive/6ec5228202a436e4ed2b7275f07c2e07327f6ac3.jpg', 'duration': 217, 'tags': ['方大树', '灯叔', '歌曲', '天籁之音', '好听', '《情难枕》完整版歌曲'], 'date': '2025-06-28', 'platform': 'bilibili'}, {'id': 'BV15P2kYPEEB', 'aid': 113284694935082, 'bvid': 'BV15P2kYPEEB', 'artist': '相遇星球', 'title': '枕著光的她(伴奏)-任素汐', 'album': 'BV15P2kYPEEB', 'artwork': 'http://i0.hdslb.com/bfs/archive/6f956feae33d876b440692a7e0a55e2ebec1b4fa.jpg', 'duration': 197, 'tags': ['任素汐', 'KARAOKE', 'KTV', '枕著光的她', '伴奏'], 'date': '2024-10-11', 'platform': 'bilibili'}, {'id': '9WwACAl8gIw', 'title': '任素汐 - 枕著光的她『等到歲月把皺紋縫成一朵花,他們輓著手把生活過成一幅畫。』【動態歌詞 | Pinyin Lyrics】【PENGUIN MUSIC】', 'artist': 'Pen Q Music', 'artwork': 'https://i.ytimg.com/vi/9WwACAl8gIw/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCq1h-wKrXiebFJfYBUlWNmHClWaw', 'platform': 'Youtube'}, {'id': '8UNcuN917pA', 'title': '王招君', 'artist': '任素汐 - Topic', 'artwork': 'https://i.ytimg.com/vi/8UNcuN917pA/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAXlwZ-H0bsckpKk3KwZja-nw5anQ', 'platform': 'Youtube'}, {'id': '_CCx3mXG6RE', 'title': '把王菲弄哭的任素汐,自己作词作曲演唱《王招君》,不炫技太走心', 'artist': 'EDM Music One Hour', 'artwork': 'https://i.ytimg.com/vi/_CCx3mXG6RE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCHynYXsiWEOoK9q0l6SYifMFyXng', 'platform': 'Youtube'}, {'id': '9X0tJUJjHss', 'title': '任素汐 | 枕著光的她《(2024年春節聯歡晚會)》 #lyrics', 'artist': '剧好听', 'artwork': 'https://i.ytimg.com/vi/9X0tJUJjHss/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDV0AiLGYpTmCctnXNOUcACieoYlw', 'platform': 'Youtube'}, {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA05byEDO5Ln0BCNHzsOd3oyn46Hg', 'platform': 'Youtube'}, {'id': '4G42YPAUGoc', 'title': '任素汐春晚歌曲《枕著光的她》,唱出相濡以沫的愛情,太感人了', 'artist': '夕照影音', 'artwork': 'https://i.ytimg.com/vi/4G42YPAUGoc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCwMAN76GmXi_XFqqXUIRCeeb6BLw', 'platform': 'Youtube'}, {'id': 'ILq9rgyd93k', 'title': "爱是平凡里发的芽|She Who Rests in Light covered by Hydrangea Children's Choir", 'artist': "Hydrangea Children's Choir 绣球花小合唱团", 'artwork': 'https://i.ytimg.com/vi/ILq9rgyd93k/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCu_w3EZDjrnQ5VBVddJ0rEwDOF2w', 'platform': 'Youtube'}, {'id': 'm5HJzhfXhO0', 'title': '任素沙 春晚独唱”吊打半个乐坛《枕着时光的她》', 'artist': '娱音研究所', 'artwork': 'https://i.ytimg.com/vi/m5HJzhfXhO0/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDLdgUZ28MKfw-0YQBhhIH3U7hcUQ', 'platform': 'Youtube'}, {'id': 'mrBFVtVS69k', 'title': '听任素汐 毛不易合唱《别来无恙》 愿你我都被世界温柔以待 「2026央视春晚」| CCTV春晚', 'artist': 'CCTV春晚', 'artwork': 'https://i.ytimg.com/vi/mrBFVtVS69k/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCVkYHoujHH3hP0HxX-ZR5m1F7CDA', 'platform': 'Youtube'}, {'id': 'tMb6tyVqCwo', 'title': '任素汐到底有多牛,一开口唱哭王菲感动黄渤!#音乐分享', 'artist': '娱音研究所', 'artwork': 'https://i.ytimg.com/vi/tMb6tyVqCwo/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCxRqomIyf_43um7Poc3RB8Jxwweg', 'platform': 'Youtube'}, {'id': '-hu3s5HxWt0', 'title': '枕著光的她 (和音伴奏) 任素汐 (Karaoke 純音樂)', 'artist': 'Bonnie Ding', 'artwork': 'https://i.ytimg.com/vi/-hu3s5HxWt0/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYUiBeKGUwDw==&rs=AOn4CLD6PPd-WyQtxtsdM9NMf5km3j3lvw', 'platform': 'Youtube'}] [2026-09-16 21:42:17] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:42:17] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:42:17] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:42:17] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:42:17] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 allow_download:True [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:600: 根据【枕着光的她 - 任素汐【Hi-Res】-我的音乐广场】找到歌曲【['枕着光的她 - 任素汐【Hi-Res】-我的音乐广场']】 [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 匹配数量:1 auto_index:None [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:513: cur_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1184: get_music_url name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=TDY1NoLNFPA [2026-09-16 21:42:17] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=TDY1NoLNFPA [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:42:17] [0.6.1] [INFO] file.py:1142: [proxy:5c39db9f] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OT [2026-09-16 21:42:17] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:42:17] [0.6.1] [INFO] file.py:1145: [proxy:5c39db9f] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 [2026-09-16 21:42:17] [0.6.1] [INFO] file.py:1173: [proxy:5c39db9f] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:42:17] [0.6.1] [INFO] file.py:1219: [proxy:5c39db9f] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:42:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:42:17] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1dxrvYTEvd", "aid": 113793195575985, "bvid": "BV1dxrvYTEvd", "artist": "\u6211\u7684\u97f3\u4e50\u5e7f\u573a", "title": "\u6795\u7740\u5149\u7684\u5979 - \u4efb\u7d20\u6c50\u3010Hi-Res\u3011", "album": "BV1dxrvYTEvd", "artwork": "http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg", "duration": 191, "tags": ["\u97f3\u4e50\u5206\u4eab\u5b98\u7b2c\u5341\u671f", "\u6b4c\u5355", "Hi-Res", "\u4efb\u7d20\u6c50", "\u97f3\u4e50\u5206\u4eab\u5b98", "\u58c1\u7eb8", "\u65e5\u63a8\u6b4c\u5355", "\u6b4c\u66f2", "\u97f3\u4e50\u9009\u96c6", "\u9ad8\u97f3\u8d28", "\u542c\u6b4c"], "date": "2025-01-09", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566137722"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:18] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566137722: False [2026-09-16 21:42:18] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:18] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:18] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:18] [0.6.1] [INFO] file.py:1267: [proxy:5c39db9f] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwg content_type=application/json content_length=43 [2026-09-16 21:42:18] [0.6.1] [ERROR] file.py:1382: [proxy:5c39db9f] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:42:18] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:42:18] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:42:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:440: get_next_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:441: _play_next. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, cur_music:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 allow_download:True [2026-09-16 21:42:18] [0.6.1] [INFO] music_library.py:600: 根据【枕着光的她 - 任素汐【Hi-Res】-我的音乐广场】找到歌曲【['枕着光的她 - 任素汐【Hi-Res】-我的音乐广场']】 [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 匹配数量:1 auto_index:None [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:513: cur_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:18] [0.6.1] [INFO] music_library.py:1184: get_music_url name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:18] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:42:18] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:42:18] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=aopNez_JbVg [2026-09-16 21:42:18] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=aopNez_JbVg [2026-09-16 21:42:18] [0.6.1] [INFO] file.py:1142: [proxy:a3173132] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OT [2026-09-16 21:42:18] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:42:18] [0.6.1] [INFO] file.py:1145: [proxy:a3173132] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 [2026-09-16 21:42:18] [0.6.1] [INFO] file.py:1173: [proxy:a3173132] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:42:18] [0.6.1] [INFO] file.py:1219: [proxy:a3173132] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:42:18] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:42:18] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:18] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1dxrvYTEvd", "aid": 113793195575985, "bvid": "BV1dxrvYTEvd", "artist": "\u6211\u7684\u97f3\u4e50\u5e7f\u573a", "title": "\u6795\u7740\u5149\u7684\u5979 - \u4efb\u7d20\u6c50\u3010Hi-Res\u3011", "album": "BV1dxrvYTEvd", "artwork": "http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg", "duration": 191, "tags": ["\u97f3\u4e50\u5206\u4eab\u5b98\u7b2c\u5341\u671f", "\u6b4c\u5355", "Hi-Res", "\u4efb\u7d20\u6c50", "\u97f3\u4e50\u5206\u4eab\u5b98", "\u58c1\u7eb8", "\u65e5\u63a8\u6b4c\u5355", "\u6b4c\u66f2", "\u97f3\u4e50\u9009\u96c6", "\u9ad8\u97f3\u8d28", "\u542c\u6b4c"], "date": "2025-01-09", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566138675"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:18] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566138675: False [2026-09-16 21:42:18] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:18] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:18] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:18] [0.6.1] [INFO] file.py:1267: [proxy:a3173132] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwg content_type=application/json content_length=43 [2026-09-16 21:42:18] [0.6.1] [ERROR] file.py:1382: [proxy:a3173132] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:42:18] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:42:18] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:42:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:440: get_next_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:441: _play_next. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, cur_music:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 allow_download:True [2026-09-16 21:42:19] [0.6.1] [INFO] music_library.py:600: 根据【枕着光的她 - 任素汐【Hi-Res】-我的音乐广场】找到歌曲【['枕着光的她 - 任素汐【Hi-Res】-我的音乐广场']】 [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 匹配数量:1 auto_index:None [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:513: cur_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:19] [0.6.1] [INFO] music_library.py:1184: get_music_url name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:19] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:42:19] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:42:19] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=suiJYPLY97I [2026-09-16 21:42:19] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=suiJYPLY97I [2026-09-16 21:42:19] [0.6.1] [INFO] file.py:1142: [proxy:eee3978d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OT [2026-09-16 21:42:19] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:42:19] [0.6.1] [INFO] file.py:1145: [proxy:eee3978d] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 [2026-09-16 21:42:19] [0.6.1] [INFO] file.py:1173: [proxy:eee3978d] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:42:19] [0.6.1] [INFO] file.py:1219: [proxy:eee3978d] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:42:19] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:42:19] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:19] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1dxrvYTEvd", "aid": 113793195575985, "bvid": "BV1dxrvYTEvd", "artist": "\u6211\u7684\u97f3\u4e50\u5e7f\u573a", "title": "\u6795\u7740\u5149\u7684\u5979 - \u4efb\u7d20\u6c50\u3010Hi-Res\u3011", "album": "BV1dxrvYTEvd", "artwork": "http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg", "duration": 191, "tags": ["\u97f3\u4e50\u5206\u4eab\u5b98\u7b2c\u5341\u671f", "\u6b4c\u5355", "Hi-Res", "\u4efb\u7d20\u6c50", "\u97f3\u4e50\u5206\u4eab\u5b98", "\u58c1\u7eb8", "\u65e5\u63a8\u6b4c\u5355", "\u6b4c\u66f2", "\u97f3\u4e50\u9009\u96c6", "\u9ad8\u97f3\u8d28", "\u542c\u6b4c"], "date": "2025-01-09", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566139428"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:19] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566139428: False [2026-09-16 21:42:19] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:19] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:19] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:19] [0.6.1] [INFO] file.py:1267: [proxy:eee3978d] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwg content_type=application/json content_length=43 [2026-09-16 21:42:19] [0.6.1] [ERROR] file.py:1382: [proxy:eee3978d] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:42:19] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:42:19] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:42:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:440: get_next_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:441: _play_next. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, cur_music:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 allow_download:True [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:600: 根据【枕着光的她 - 任素汐【Hi-Res】-我的音乐广场】找到歌曲【['枕着光的她 - 任素汐【Hi-Res】-我的音乐广场']】 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 匹配数量:1 auto_index:None [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:513: cur_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1184: get_music_url name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=ZFKWj-pGAMo [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=ZFKWj-pGAMo [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1142: [proxy:1f7cd220] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OT [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1145: [proxy:1f7cd220] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1173: [proxy:1f7cd220] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1219: [proxy:1f7cd220] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:42:20] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:42:20] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:20] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1dxrvYTEvd", "aid": 113793195575985, "bvid": "BV1dxrvYTEvd", "artist": "\u6211\u7684\u97f3\u4e50\u5e7f\u573a", "title": "\u6795\u7740\u5149\u7684\u5979 - \u4efb\u7d20\u6c50\u3010Hi-Res\u3011", "album": "BV1dxrvYTEvd", "artwork": "http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg", "duration": 191, "tags": ["\u97f3\u4e50\u5206\u4eab\u5b98\u7b2c\u5341\u671f", "\u6b4c\u5355", "Hi-Res", "\u4efb\u7d20\u6c50", "\u97f3\u4e50\u5206\u4eab\u5b98", "\u58c1\u7eb8", "\u65e5\u63a8\u6b4c\u5355", "\u6b4c\u66f2", "\u97f3\u4e50\u9009\u96c6", "\u9ad8\u97f3\u8d28", "\u542c\u6b4c"], "date": "2025-01-09", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566140183"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:20] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566140183: False [2026-09-16 21:42:20] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:20] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:20] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1267: [proxy:1f7cd220] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwg content_type=application/json content_length=43 [2026-09-16 21:42:20] [0.6.1] [ERROR] file.py:1382: [proxy:1f7cd220] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:42:20] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:42:20] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:42:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:440: get_next_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:441: _play_next. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, cur_music:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 allow_download:True [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:600: 根据【枕着光的她 - 任素汐【Hi-Res】-我的音乐广场】找到歌曲【['枕着光的她 - 任素汐【Hi-Res】-我的音乐广场']】 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 匹配数量:1 auto_index:None [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:513: cur_music 枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1184: get_music_url name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9 [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=cCTwlKdpGqI [2026-09-16 21:42:20] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=cCTwlKdpGqI [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1142: [proxy:da987be3] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OT [2026-09-16 21:42:20] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1145: [proxy:da987be3] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwgInRhZ3MiOiBbIlx1OTdmM1x1NGU1MFx1NTIwNlx1NGVhYlx1NWI5OFx1N2IyY1x1NTM0MVx1NjcxZiIsICJcdTZiNGNcdTUzNTUiLCAiSGktUmVzIiwgIlx1NGVmYlx1N2QyMFx1NmM1MCIsICJcdTk3ZjNcdTRlNTBcdTUyMDZcdTRlYWJcdTViOTgiLCAiXHU1OGMxXHU3ZWI4IiwgIlx1NjVlNVx1NjNhOFx1NmI0Y1x1NTM1NSIsICJcdTZiNGNcdTY2ZjIiLCAiXHU5N2YzXHU0ZTUwXHU5MDA5XHU5NmM2IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTU0MmNcdTZiNGMiXSwgImRhdGUiOiAiMjAyNS0wMS0wOSIsICJwbGF0Zm9ybSI6ICJiaWxpYmlsaSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1173: [proxy:da987be3] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:42:20] [0.6.1] [INFO] file.py:1219: [proxy:da987be3] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:42:20] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:42:20] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:20] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1dxrvYTEvd", "aid": 113793195575985, "bvid": "BV1dxrvYTEvd", "artist": "\u6211\u7684\u97f3\u4e50\u5e7f\u573a", "title": "\u6795\u7740\u5149\u7684\u5979 - \u4efb\u7d20\u6c50\u3010Hi-Res\u3011", "album": "BV1dxrvYTEvd", "artwork": "http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg", "duration": 191, "tags": ["\u97f3\u4e50\u5206\u4eab\u5b98\u7b2c\u5341\u671f", "\u6b4c\u5355", "Hi-Res", "\u4efb\u7d20\u6c50", "\u97f3\u4e50\u5206\u4eab\u5b98", "\u58c1\u7eb8", "\u65e5\u63a8\u6b4c\u5355", "\u6b4c\u66f2", "\u97f3\u4e50\u9009\u96c6", "\u9ad8\u97f3\u8d28", "\u542c\u6b4c"], "date": "2025-01-09", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566140935"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:21] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566140935: False [2026-09-16 21:42:21] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:21] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:21] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1dxrvYTEvd', 'aid': 113793195575985, 'bvid': 'BV1dxrvYTEvd', 'artist': '我的音乐广场', 'title': '枕着光的她 - 任素汐【Hi-Res】', 'album': 'BV1dxrvYTEvd', 'artwork': 'http://i2.hdslb.com/bfs/archive/e7a5b8d5f115052ad8bde2535ec502417b25f89f.jpg', 'duration': 191, 'tags': ['音乐分享官第十期', '歌单', 'Hi-Res', '任素汐', '音乐分享官', '壁纸', '日推歌单', '歌曲', '音乐选集', '高音质', '听歌'], 'date': '2025-01-09', 'platform': 'bilibili'} [2026-09-16 21:42:21] [0.6.1] [INFO] file.py:1267: [proxy:da987be3] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYWlkIjogMTEzNzkzMTk1NTc1OTg1LCAiYnZpZCI6ICJCVjFkeHJ2WVRFdmQiLCAiYXJ0aXN0IjogIlx1NjIxMVx1NzY4NFx1OTdmM1x1NGU1MFx1NWU3Zlx1NTczYSIsICJ0aXRsZSI6ICJcdTY3OTVcdTc3NDBcdTUxNDlcdTc2ODRcdTU5NzkgLSBcdTRlZmJcdTdkMjBcdTZjNTBcdTMwMTBIaS1SZXNcdTMwMTEiLCAiYWxidW0iOiAiQlYxZHhydllURXZkIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS9lN2E1YjhkNWYxMTUwNTJhZDhiZGUyNTM1ZWM1MDI0MTdiMjVmODlmLmpwZyIsICJkdXJhdGlvbiI6IDE5MSwg content_type=application/json content_length=43 [2026-09-16 21:42:21] [0.6.1] [ERROR] file.py:1382: [proxy:da987be3] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:42:21] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:42:21] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:42:21] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:42:21] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:42:21] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:42:21] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:42:21] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:42:21] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:42:21] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:42:21] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:42:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:42:22] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:42:22] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:42:22] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:42:22] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:42:22] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:42:22] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:42:22] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:42:23] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:42:23] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 枕着光的她, type: music [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566143391"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566143391: True [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 枕着光的她, type: music [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 21:42:23] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566143592"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566143592: True [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 19 results [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 音悦台 for keyword: 枕着光的她, type: music [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 音悦台 [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 音悦台 not found [2026-09-16 21:42:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u97f3\u60a6\u53f0", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566144394"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566144394: False [2026-09-16 21:42:24] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 音悦台: Plugin 音悦台 not found [2026-09-16 21:42:24] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 音悦台 not found', 'id': 'msg_1789566144394'} [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 枕着光的她, type: music [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 21:42:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566144597"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566144597: False [2026-09-16 21:42:24] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 21:42:24] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789566144597'} [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 枕着光的她, type: music [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 21:42:24] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 21:42:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566144801"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566144801: False [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789566144801'} [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 枕着光的她, type: music [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 21:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566145006"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566145006: False [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789566145006'} [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 枕着光的她, type: music [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 21:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566145210"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566145210: False [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789566145210'} [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 枕着光的她, type: music [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566145414"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566145414: False [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789566145414'} [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 枕着光的她, type: music [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 21:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566145618"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566145618: False [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789566145618'} [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 枕着光的她, type: music [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 21:42:25] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 21:42:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566145822"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566145822: False [2026-09-16 21:42:26] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:26] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789566145822'} [2026-09-16 21:42:26] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 枕着光的她, type: music [2026-09-16 21:42:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 21:42:26] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '枕着光的她', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:42:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u6795\u7740\u5149\u7684\u5979", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566146027"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:42:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 21:42:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566146027: False [2026-09-16 21:42:26] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 21:42:26] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789566146027'} [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Search failed: Plugin 音悦台 not found [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:42:26] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 21:42:26] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': 'BV1F4421P7BV', 'aid': 1750310804, 'bvid': 'BV1F4421P7BV', 'artist': '宸哥ovo', 'title': '枕着光的她,往前走', 'album': 'BV1F4421P7BV', 'artwork': 'http://i0.hdslb.com/bfs/archive/0c2c1ec81a8a07f2706da14ce3f1868fe43f690c.jpg', 'duration': 184, 'tags': ['枕着光的她', '平安', '音乐', '爱情', '民谣', '2024bilibili迎春会', '任素汐', '吉他弹唱', '我为新年唱支歌'], 'date': '2024-02-10', 'platform': 'bilibili'}, {'id': 'BV1vs4beYEDo', 'aid': 113129019152834, 'bvid': 'BV1vs4beYEDo', 'artist': '视频剪辑和制作', 'title': '枕着光的她视频背景舞台LED背景视频', 'album': 'BV1vs4beYEDo', 'artwork': 'http://i0.hdslb.com/bfs/archive/6d794e8483d99b8451dc24451eb5fbbf19cf52bd.jpg', 'duration': 191, 'tags': ['视频背景', '枕着光的她', '背景视频'], 'date': '2024-09-13', 'platform': 'bilibili'}, {'id': 'dzWHlb41c_c', 'title': '枕着光的她 任素汐', 'artist': 'sherry zhu', 'artwork': 'https://i.ytimg.com/vi/dzWHlb41c_c/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLCxtTw7KJ363d2N83s7wdU3U0mDbQ', 'platform': 'Youtube'}, {'id': 'BV1qDJgzoEG5', 'aid': 114528306071205, 'bvid': 'BV1qDJgzoEG5', 'artist': '造梦可汗', 'title': '【Hi-Res无损音质】 任素汐《枕着光的她》这歌原来这么好听 !经典歌曲最好听的版本 4K60P', 'alias': '枕着光的她', 'album': 'BV1qDJgzoEG5', 'artwork': 'http://i1.hdslb.com/bfs/archive/2f89ef6ea39d5a57cddfb4bea5a4d684133a7cc6.jpg', 'duration': 189, 'tags': ['任素汐', 'bgm', '音乐分享官第十一期', '高音质', '音质', '音乐分享官', '无损音质', '黑胶唱片', '主题曲', '华语音乐', '经典歌曲'], 'date': '2025-05-18', 'platform': 'bilibili'}, {'id': 'BV11C411z7CE', 'aid': 1950263181, 'bvid': 'BV11C411z7CE', 'artist': '最久music', 'title': '2024春晚,任素汐一首《枕着光的她》温馨感人,歌声太治愈了', 'alias': '枕着光的她', 'album': 'BV11C411z7CE', 'artwork': 'http://i0.hdslb.com/bfs/archive/c0f69207b96ec6ad9d65b31d6abe79d3fd6209aa.jpg', 'duration': 169, 'tags': ['春晚', '枕着光的她', '治愈', '温馨', '感人', '新春赏乐纪', '2024春晚', '音乐分享官-新春赏乐纪特别企划', '任素汐', '温暖', '好听'], 'date': '2024-02-10', 'platform': 'bilibili'}, {'id': 'BV1Q4Y76WENb', 'aid': 117252288482885, 'bvid': 'BV1Q4Y76WENb', 'artist': '春鸿眯happy', 'title': '《枕着光的她》演唱:希林娜依·高', 'alias': '枕着光的她', 'album': 'BV1Q4Y76WENb', 'artwork': 'http://i2.hdslb.com/bfs/archive/83d1a7a08377dd9c7db6b76c5b9a8cac622e0c3e.jpg', 'duration': 134, 'tags': ['音乐现场', '开口跪', '希林娜依·高', '希林娜依高'], 'date': '2026-09-11', 'platform': 'bilibili'}, {'id': 'BV1qs2HBBEjZ', 'aid': 115670784153803, 'bvid': 'BV1qs2HBBEjZ', 'artist': '友谊长存友好', 'title': '《枕着光的她》MV任素汐', 'alias': '枕着光的她', 'album': 'BV1qs2HBBEjZ', 'artwork': 'http://i1.hdslb.com/bfs/archive/aff7ab3a3a92b7000949b4c127fc78a33cde4dec.jpg', 'duration': 190, 'tags': ['歌曲', 'MV', '任素汐', '华语MV', '国语MV', '经典'], 'date': '2025-12-06', 'platform': 'bilibili'}, {'id': 'BV1LmazziEbe', 'aid': 115139969883318, 'bvid': 'BV1LmazziEbe', 'artist': '果果音乐盒', 'title': '【任素汐】任素汐热门歌单10首《枕着光的她 》《胡广生 》《王招君 》《我要你》《 岁岁》《 大儿歌》《 等一等》《 再见青春 》《亲爱的小孩 》《北方》', 'alias': '枕着光的她 ', 'album': 'BV1LmazziEbe', 'artwork': 'http://i0.hdslb.com/bfs/archive/802557010f7fed8f7fb28d24d202011465e3791b.jpg', 'duration': 2253, 'tags': ['歌曲', '华语金曲', '任素汐', '8090怀旧歌单', '歌单', '好听', '胡广生', '怀旧老歌'], 'date': '2025-09-04', 'platform': 'bilibili'}, {'id': 'BV1Zm411979c', 'aid': 1900257650, 'bvid': 'BV1Zm411979c', 'artist': '谣-摇', 'title': '官方MV┃任素汐《枕着光的她》┃2024春晚限定', 'alias': '枕着光的她', 'album': 'BV1Zm411979c', 'artwork': 'http://i2.hdslb.com/bfs/archive/7e1a8d1703e222495ae7d7ca8000ffa1812f3d71.jpg', 'duration': 191, 'tags': ['音乐分享官-新春赏乐纪特别企划', '华语MV', '任素汐', '官方MV', '枕着光的她', '音乐分享官', 'MV', '新歌', '民谣', '春晚'], 'date': '2024-02-10', 'platform': 'bilibili'}, {'id': 'BV1pYFzzPEtz', 'aid': 116021763572839, 'bvid': 'BV1pYFzzPEtz', 'artist': '含梦前行', 'title': '【4KHDR】任素汐《枕着光的她》2024CW原版全网最高画质', 'alias': '枕着光的她', 'album': 'BV1pYFzzPEtz', 'artwork': 'http://i1.hdslb.com/bfs/archive/fd998ec947bdc9577d2973fb6894b27fc85ee105.jpg', 'duration': 173, 'tags': ['最高画质', 'MV'], 'date': '2026-02-06', 'platform': 'bilibili'}, {'id': 'BV19J4m1a7zT', 'aid': 1251284960, 'bvid': 'BV19J4m1a7zT', 'artist': '天使童声合唱团', 'title': '《枕着光的她》童声版也太治愈了 ,娓娓道来平淡生活里的光', 'alias': '枕着光的她', 'album': 'BV19J4m1a7zT', 'artwork': 'http://i1.hdslb.com/bfs/archive/d93fec002e651d4d5687e88e2a9bd55baa08bddf.jpg', 'duration': 107, 'tags': ['儿歌', '治愈', '童声'], 'date': '2024-03-06', 'platform': 'bilibili'}, {'id': 'BV1Gp42127zA', 'aid': 1852539276, 'bvid': 'BV1Gp42127zA', 'artist': 'OK周舟', 'title': '任素汐---枕着光的她', 'album': 'BV1Gp42127zA', 'artwork': 'http://i2.hdslb.com/bfs/archive/f7c8de333aa06355147f0e41ca98559210118776.png', 'duration': 172, 'tags': ['音乐现场'], 'date': '2024-04-02', 'platform': 'bilibili'}, {'id': 'BV18hxMzsEs9', 'aid': 115321683903555, 'bvid': 'BV18hxMzsEs9', 'artist': '绣球花小合唱团', 'title': '爱是平凡里发的芽|绣球花翻唱《枕着光的她》', 'alias': '枕着光的她', 'album': 'BV18hxMzsEs9', 'artwork': 'http://i2.hdslb.com/bfs/archive/513f43ff4873d7c4695dee203082a44139a3702a.jpg', 'duration': 179, 'tags': ['现场演出', '绣球花小合唱团', '枕着光的她', 'MV', '听歌', '国庆节', '童声合唱', '任素汐', '中秋节', '歌曲'], 'date': '2025-10-05', 'platform': 'bilibili'}, {'id': 'BV11zpee9E9r', 'aid': 113099877188251, 'bvid': 'BV11zpee9E9r', 'artist': '希林娜依高', 'title': '【乐在旅途】希林娜依·高《枕着光的她》', 'alias': '枕着光的她', 'album': 'BV11zpee9E9r', 'artwork': 'http://i2.hdslb.com/bfs/archive/0b73736b1bd36ee10f0147c4556631344401bf6a.jpg', 'duration': 153, 'tags': ['音乐现场', 'LIVE', '希林娜依高', '一起来看live', '希林娜依·高', '枕着光的她'], 'date': '2024-09-08', 'platform': 'bilibili'}, {'id': 'BV1b54teHEAw', 'aid': 113127576375155, 'bvid': 'BV1b54teHEAw', 'artist': '靖菡老师教唱歌', 'title': '如何把这首温馨的《枕着光的她》演唱得更好听?歌曲分析教唱分享', 'alias': '枕着光的她', 'album': 'BV1b54teHEAw', 'artwork': 'http://i2.hdslb.com/bfs/archive/facb3e5a47d8ffe352c4f37613d1a954aae9cb8e.jpg', 'duration': 778, 'tags': ['唱歌技巧', '声乐教学', '流行歌曲教唱', '零基础学唱歌'], 'date': '2024-09-13', 'platform': 'bilibili'}, {'id': 'BV1msUiYGEXb', 'aid': 113493520946425, 'bvid': 'BV1msUiYGEXb', 'artist': 'A梦舞台背景制作', 'title': '074任素汐\xa0-\xa0枕着光的她(原唱)#年会舞蹈晚会励志唯美歌曲mv大屏背景视频 #完整版歌曲', 'album': 'BV1msUiYGEXb', 'artwork': 'http://i1.hdslb.com/bfs/archive/4df6f3c0ea53d85c37f0a67730aeede66b396b94.jpg', 'duration': 191, 'tags': ['歌曲', 'ACG音乐'], 'date': '2024-11-17', 'platform': 'bilibili'}, {'id': 'BV1gXdpYwE6b', 'aid': 114302568629953, 'bvid': 'BV1gXdpYwE6b', 'artist': '六六七七哎', 'title': '《枕着光的她》这舒缓的旋律和浅唱低吟娓娓道来的歌声,温暖且治愈,如春风拂面……人间烟火气,最扶凡人心,在这忙碌喧嚣的世界,唱出了人们心中的向往和美好,愿我们做个', 'alias': '枕着光的她', 'album': 'BV1gXdpYwE6b', 'artwork': 'http://i2.hdslb.com/bfs/archive/072bd8e00d5e85f4396175c12dbbaf1abbd9f8b6.jpg', 'duration': 190, 'tags': ['治愈', '春风', '好听', '音乐玩家招募令第七期', '音乐研究所', '旋律', '世界', '温柔', '歌声', '人间烟火气', '温暖'], 'date': '2025-04-08', 'platform': 'bilibili'}, {'id': 'BV1iKUZB5EHb', 'aid': 115632280438849, 'bvid': 'BV1iKUZB5EHb', 'artist': '爆歪卡糖', 'title': '《枕着光的她》二声部合唱谱', 'alias': '枕着光的她', 'album': 'BV1iKUZB5EHb', 'artwork': 'http://i1.hdslb.com/bfs/archive/b9c001718e8d8a76ee13237227d72c5e1de045f2.jpg', 'duration': 162, 'tags': ['枕着光的她二声部合唱谱', '声乐', '童声合唱', '合唱团', '枕着光的她', '枕着光的她合唱谱', '合唱'], 'date': '2025-11-29', 'platform': 'bilibili'}, {'id': 'BV1X4zEYyE2N', 'aid': 113570310265248, 'bvid': 'BV1X4zEYyE2N', 'artist': '酷尚音乐', 'title': '冬日暖歌!任素汐一首《枕着光的她》温暖治愈的歌声,让人感动', 'alias': '枕着光的她', 'album': 'BV1X4zEYyE2N', 'artwork': 'http://i1.hdslb.com/bfs/archive/2de822a12b304df67df220a94166e436d29452f1.jpg', 'duration': 191, 'tags': ['治愈', '音乐分享官', '枕着光的她', '热门音乐', '音乐分享官第十期', '网络热歌', '任素汐', '歌曲分享'], 'date': '2024-11-30', 'platform': 'bilibili'}, {'id': 'BV1QcAneCEZe', 'aid': 114033931848162, 'bvid': 'BV1QcAneCEZe', 'artist': '喜沙沙创意沙画', 'title': '任素汐春晚沙画MV《枕着光的她》唱进无数人的心坎里,太有才了!', 'alias': '枕着光的她', 'album': 'BV1QcAneCEZe', 'artwork': 'http://i2.hdslb.com/bfs/archive/dfe60595a0ba9dc640fd0736b80043f8c00a16c8.jpg', 'duration': 191, 'tags': ['沙画mv', '歌曲', 'MV', '沙画', '尤佳沙画', '喜沙沙', '枕着光的她', '任素汐', '沙画视频', '沙画定制'], 'date': '2025-02-20', 'platform': 'bilibili'}, {'id': 'BV1gLtd6mEtr', 'aid': 117205664532501, 'bvid': 'BV1gLtd6mEtr', 'artist': '肥兔音乐吧', 'title': '《亲爱的你啊》《我要你》《胡广生》《王招君》《枕着光的她》《有一点动心》《岁岁》《好》《北方》《莫怕莫怕》', 'alias': '亲爱的你啊', 'album': 'BV1gLtd6mEtr', 'artwork': 'http://i0.hdslb.com/bfs/archive/9af36b3376dfedd7c1e88424957dddd04dba685a.jpg', 'duration': 2199, 'tags': ['歌单', '经典老歌', '经典歌单', '热门歌单', '音乐选集', '流行歌曲', '音乐合集', '音乐', '歌曲', '歌曲合集'], 'date': '2026-09-08', 'platform': 'bilibili'}, {'id': 'dsXdEwlUY0Y', 'title': '任素汐在春晚的一首《枕着光的她》一开口幸福的画面就浮现在眼前', 'artist': '酷尚音乐', 'artwork': 'https://i.ytimg.com/vi/dsXdEwlUY0Y/hqdefault.jpg?sqp=-oaymwEnCOADEI4CSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLB3bFRxy_7hYcMjBjOrnUmcMEqwhw', 'platform': 'Youtube'}, {'id': '03gn9EKRjdI', 'title': "Happy mother's Day | 母亲节,用歌声向她传达爱 | 任素汐《枕着光的她》官方动态歌词版MV [4K 60HZ超高清画质]|騰訊音樂雲頻道", 'artist': '腾讯音乐发行', 'artwork': 'https://i.ytimg.com/vi/03gn9EKRjdI/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLBncAajiL9v9K6ZO2uVEyUgsyN6Dw', 'platform': 'Youtube'}, {'id': 'QQ98JEo145A', 'title': '引发共鸣!任素汐演唱的民谣 #枕着光的她 成为2024年央视春晚最走心的曲目!有唱出你心里的浪漫吗? | TME | 腾讯音乐娱乐', 'artist': 'TME_official', 'artwork': 'https://i.ytimg.com/vi/QQ98JEo145A/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLBH-4PijHadz5G_xyT39ttFmxGgNg', 'platform': 'Youtube'}, {'id': '-WPrMF9vAlY', 'title': '[乐在旅途第二季]《枕着光的她》 演唱:希林娜依·高|第艺流', 'artist': '第艺流', 'artwork': 'https://i.ytimg.com/vi/-WPrMF9vAlY/hq720.jpg?sqp=-oaymwFBCOgCEMoBSFryq4qpAzMIARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBOKEEwD7gC9xg=&rs=AOn4CLBiBjPxu2Mk7pa8zm92VeDj6i1ftQ', 'platform': 'Youtube'}, {'id': 'fqboOxbtgCI', 'title': '任素汐龙年春晚歌曲《枕着光的她》MV温暖治愈了多少人', 'artist': 'Yunduo Ai', 'artwork': 'https://i.ytimg.com/vi/fqboOxbtgCI/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLCY9zf_1VZYsivrBTJh7FzyJceFxQ', 'platform': 'Youtube'}, {'id': '3Cm9MuLhopQ', 'title': '任素汐走心民谣《枕着光的她》唱出心中最温暖的爱情 [2024年春节联欢晚会现场]|騰訊音樂雲頻道', 'artist': '腾讯音乐发行', 'artwork': 'https://i.ytimg.com/vi/3Cm9MuLhopQ/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLAA2qT9dgdf7aAm5HGPjIrixGg35A', 'platform': 'Youtube'}, {'id': 'zRTrjFJcsEM', 'title': '热门音乐《枕着光的她》歌曲教唱', 'artist': '音之谷赵老师声乐课堂', 'artwork': 'https://i.ytimg.com/vi/zRTrjFJcsEM/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLDnjZOW-3GgEe7SsTagTRsF0PgDFg', 'platform': 'Youtube'}, {'id': '3AM4eOeoFpM', 'title': '如何演唱抒情歌曲更好听?《枕着光的她》歌曲分析教唱分享', 'artist': '靖菡教唱歌', 'artwork': 'https://i.ytimg.com/vi/3AM4eOeoFpM/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLCELaCwmzfEKg6DhQ9XcK579Fd3sg', 'platform': 'Youtube'}, {'id': 'AvoMRFOrNDg', 'title': '2024春晚,任素汐一首《枕着光的她》温馨感人,歌声太治愈了#一口气听完#经典老歌#怀旧经典#老歌#怀旧', 'artist': '最久Music_Official', 'artwork': 'https://i.ytimg.com/vi/AvoMRFOrNDg/hqdefault.jpg?sqp=-oaymwFBCOADEI4CSFryq4qpAzMIARUAAAAAGAElAADIQj0AgKJDeAHwAQH4AdIGgALgA4oCDAgAEAEYZSBlKEUwD7gC9xg=&rs=AOn4CLCnDoK8jmnCPHeLghuE_uMWjbuJPA', 'platform': 'Youtube'}, {'id': '1wqByAcTcOk', 'title': '任素汐 枕著光的她karaokeKTV 伴奏 左伴右唱 karaoke 卡拉OK 伴唱 instrumental任素汐 枕着光的她karaoke', 'artist': '張淑芬', 'artwork': 'https://i.ytimg.com/vi/1wqByAcTcOk/hq720.jpg?sqp=-oaymwFBCOgCEMoBSFryq4qpAzMIARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBXKFAwD7gC9xg=&rs=AOn4CLB6fZGheyubuh4zLXAogPnHu_HzSg', 'platform': 'Youtube'}, {'id': 'Ja3ZXgHv-Sk', 'title': '【任素汐】《枕着光的她》2026深圳演唱会 #任素汐', 'artist': 'Bret Silver CCY', 'artwork': 'https://i.ytimg.com/vi/Ja3ZXgHv-Sk/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLA0UdTfStgyK6Iext3gWUbUfra_9Q', 'platform': 'Youtube'}, {'id': 'riIa1SOq8p0', 'title': '[MV] 《枕着光的她》 - #任素汐「等到岁月把皱纹缝成一朵花,他们挽着手把生活过成一幅画,可能她一千帧的芳华,都绣在了心里吧」#枕着光的她 #音乐 #抖音MV #抖音音乐 #新歌上线', 'artist': '梁振利', 'artwork': 'https://i.ytimg.com/vi/riIa1SOq8p0/hqdefault.jpg?sqp=-oaymwEnCOADEI4CSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLC6ekYq1KZqF8swYDmS7Gq2wg3IXw', 'platform': 'Youtube'}, {'id': '6g3PvdQ6wSY', 'title': '《枕着光的她》 温馨爱情 矢志不渝!「2024竖屏看春晚」| CCTV春晚', 'artist': 'CCTV春晚', 'artwork': 'https://i.ytimg.com/vi/6g3PvdQ6wSY/hqdefault.jpg?sqp=-oaymwFBCOADEI4CSFryq4qpAzMIARUAAAAAGAElAADIQj0AgKJDeAHwAQH4AbYIgAKAD4oCDAgAEAEYfyATKBUwD7gC9xg=&rs=AOn4CLD8U2d6HYbCH0RdnPSB-Mmerpr6pg', 'platform': 'Youtube'}, {'id': '9WwACAl8gIw', 'title': '任素汐 - 枕著光的她『等到歲月把皺紋縫成一朵花,他們輓著手把生活過成一幅畫。』【動態歌詞 | Pinyin Lyrics】【PENGUIN MUSIC】', 'artist': 'Pen Q Music', 'artwork': 'https://i.ytimg.com/vi/9WwACAl8gIw/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLCIehglRD_q3olygy_z5a20CB1LBw', 'platform': 'Youtube'}, {'id': '4G42YPAUGoc', 'title': '任素汐春晚歌曲《枕著光的她》,唱出相濡以沫的愛情,太感人了', 'artist': '夕照影音', 'artwork': 'https://i.ytimg.com/vi/4G42YPAUGoc/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLA6NnCt0RM5oNQyDxrUDCMx_w7Mhg', 'platform': 'Youtube'}, {'id': 'm5HJzhfXhO0', 'title': '任素沙 春晚独唱”吊打半个乐坛《枕着时光的她》', 'artist': '娱音研究所', 'artwork': 'https://i.ytimg.com/vi/m5HJzhfXhO0/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLAE3yR0K7Rf1sOPAp2qGiSKnWChOA', 'platform': 'Youtube'}, {'id': '9X0tJUJjHss', 'title': '任素汐 | 枕著光的她《(2024年春節聯歡晚會)》 #lyrics', 'artist': '剧好听', 'artwork': 'https://i.ytimg.com/vi/9X0tJUJjHss/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLCLG0dB5uDumwVhLh6IVQX_TjuvvA', 'platform': 'Youtube'}, {'id': '6p_1fJ2P6WU', 'title': '任素汐精选8首国语歌曲特别的声音特别的歌词', 'artist': '诗乐园 Poetry and music garden', 'artwork': 'https://i.ytimg.com/vi/6p_1fJ2P6WU/hq720.jpg?sqp=-oaymwEnCOgCEMoBSFryq4qpAxkIARUAAAAAGAElAADIQj0AgKJDeAG4AvcY&rs=AOn4CLBvQDzIjtJNT4vMoxBSECxYd9O1Yg', 'platform': 'Youtube'}] [2026-09-16 21:42:28] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:枕着光的她 - 任素汐【Hi-Res】-我的音乐广场 [2026-09-16 21:42:28] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:42:29] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:43:00] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:43:00] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin bilibili for keyword: 后来, type: music [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: bilibili [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:00] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "bilibili", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566180211"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566180211: True [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin bilibili, isEnd: False, found 20 results [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Youtube for keyword: 后来, type: music [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Youtube [2026-09-16 21:43:00] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:00] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Youtube", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566180914"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566180914: True [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Youtube, isEnd: False, found 19 results [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 音悦台 for keyword: 后来, type: music [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 音悦台 [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 音悦台 not found [2026-09-16 21:43:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u97f3\u60a6\u53f0", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566181615"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566181615: False [2026-09-16 21:43:01] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 音悦台: Plugin 音悦台 not found [2026-09-16 21:43:01] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 音悦台 not found', 'id': 'msg_1789566181615'} [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 后来, type: music [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 快手 [2026-09-16 21:43:01] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 快手 not found [2026-09-16 21:43:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u5feb\u624b", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566181818"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566181818: False [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 快手: Plugin 快手 not found [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 快手 not found', 'id': 'msg_1789566181818'} [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 后来, type: music [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 猫耳FM [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 猫耳FM not found [2026-09-16 21:43:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u732b\u8033FM", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566182022"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566182022: False [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 猫耳FM: Plugin 猫耳FM not found [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 猫耳FM not found', 'id': 'msg_1789566182022'} [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 后来, type: music [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: udio [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin udio not found [2026-09-16 21:43:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "udio", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566182225"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566182225: False [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin udio: Plugin udio not found [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin udio not found', 'id': 'msg_1789566182225'} [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 后来, type: music [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: suno [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin suno not found [2026-09-16 21:43:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "suno", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566182429"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566182429: False [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin suno: Plugin suno not found [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin suno not found', 'id': 'msg_1789566182429'} [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Navidrome for keyword: 后来, type: music [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Navidrome [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:43:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Navidrome", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566182633"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566182633: False [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Navidrome: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': "Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response')", 'id': 'msg_1789566182633'} [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 后来, type: music [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词千寻 [2026-09-16 21:43:02] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin 歌词千寻 not found [2026-09-16 21:43:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u5343\u5bfb", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566182837"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566182837: False [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词千寻: Plugin 歌词千寻 not found [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin 歌词千寻 not found', 'id': 'msg_1789566182837'} [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词网 for keyword: 后来, type: music [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 歌词网 [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Invalid search result from plugin 歌词网: undefined [2026-09-16 21:43:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6b4c\u8bcd\u7f51", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566183041"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Search error in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566183041: False [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin 歌词网: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result', 'id': 'msg_1789566183041'} [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 后来, type: music [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '后来', 'page': 1, 'limit': 1, 'type': 'music'} [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:43:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u540e\u6765", "page": 1, "limit": 1, "type": "music"}, "id": "msg_1789566183245"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action search failed: Plugin Audiomack not found [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566183245: False [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:1146: JS Plugin Manager search failed in plugin Audiomack: Plugin Audiomack not found [2026-09-16 21:43:03] [0.6.1] [ERROR] js_plugin_manager.py:1150: JS Plugin Manager full error response: {'success': False, 'error': 'Plugin Audiomack not found', 'id': 'msg_1789566183245'} [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Search failed: Plugin 音悦台 not found [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Search failed: Plugin 快手 not found [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Search failed: Plugin 猫耳FM not found [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Search failed: Plugin udio not found [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Search failed: Plugin suno not found [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Search failed: Search failed in plugin Navidrome: Cannot read properties of null (reading 'subsonic-response') [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Search failed: Plugin 歌词千寻 not found [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Search failed: Search failed in plugin 歌词网: Plugin 歌词网 returned invalid search result [2026-09-16 21:43:03] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Search failed: Plugin Audiomack not found [2026-09-16 21:43:03] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': '', 'aid': 20916, 'bvid': '', 'artist': '吉他老杨', 'title': '后来(刘若英)指弹独奏详细讲解', 'album': '', 'artwork': 'https://archive.biliimg.com/bfs/archive/eb9077829f649289a74be40c813727c18f1409ab.jpg', 'duration': 0, 'tags': [''], 'date': 'Invalid Date', 'platform': 'bilibili'}, {'id': 'BV1wFYm6sEFo', 'aid': 117252607248548, 'bvid': 'BV1wFYm6sEFo', 'artist': '小虎zzy', 'title': '后来(6语版)', 'album': 'BV1wFYm6sEFo', 'artwork': 'http://i1.hdslb.com/bfs/archive/6925cdc8676556ca641274d3f1f1ebd5f64a1858.jpg', 'duration': 336, 'tags': ['后来'], 'date': '2026-09-12', 'platform': 'bilibili'}, {'id': 'wTMmfbO4AAU', 'title': '后来-刘若英 演唱会版本', 'artist': 'Frank Fang', 'artwork': 'https://i.ytimg.com/vi/wTMmfbO4AAU/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCjFVP1lSAO2HT8F2SjCJPGinkq6A', 'platform': 'Youtube'}, {'id': 'jw2XfJ7ZQHQ', 'title': '后来(摇滚Live版)', 'artist': 'AURA 林娅 - Topic', 'artwork': 'https://i.ytimg.com/vi/jw2XfJ7ZQHQ/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAW8vlDASg03yyoIUiJev3Y1yDLzA', 'platform': 'Youtube'}, {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'}, {'id': 'BV1HP4y1X7ye', 'aid': 903595952, 'bvid': 'BV1HP4y1X7ye', 'artist': 'JLRS-LeoFM', 'title': '在百万豪装录音棚大声听刘若英《后来》【Hi-res】', 'alias': '后来', 'album': 'BV1HP4y1X7ye', 'artwork': 'http://i1.hdslb.com/bfs/archive/20c639a7aec2fa8740a3f1262842263a92ed6810.jpg', 'duration': 340, 'tags': ['音响', '音乐分享官5.0', '音乐分享官', '录音棚', '高音质', 'Hi-Fi', '刘若英', 'Hi-res'], 'date': '2022-12-10', 'platform': 'bilibili'}, {'id': 'BV1Fo4y1H7vt', 'aid': 397398588, 'bvid': 'BV1Fo4y1H7vt', 'artist': '索性自挂东南枝', 'title': '【Hi-Res无损】刘若英-后来「后来 我总算学会了 如何去爱」动态歌词', 'album': 'BV1Fo4y1H7vt', 'artwork': 'http://i2.hdslb.com/bfs/archive/fc2c72c7b2972098e5de0821168f311eb5e5cfc2.jpg', 'duration': 342, 'tags': ['音乐可视化', '自制', 'Hi-Res', '索性自挂东南枝', '后来', '刘若英', '无损', '4K', '开口跪', '音乐综合'], 'date': '2023-04-13', 'platform': 'bilibili'}, {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'}, {'id': 'BV1R8FDesEiJ', 'aid': 113922430473214, 'bvid': 'BV1R8FDesEiJ', 'artist': '曦光骑士', 'title': '循环歌单|“后来 我总算学会了如何去爱”|《后来》', 'alias': '后来', 'album': 'BV1R8FDesEiJ', 'artwork': 'http://i2.hdslb.com/bfs/archive/fbffbf39187ca29a0fbd3fdc0af23074e1fe7473.jpg', 'duration': 3383, 'tags': ['葬送的芙莉莲', '必剪创作', '循环歌单', '宝藏歌曲', '电脑壁纸', '音乐分享官第十期', '音乐分享官', '歌单分享', '芙莉莲', '单曲循环', '歌曲'], 'date': '2025-01-31', 'platform': 'bilibili'}, {'id': 'BV1Ka411d7aJ', 'aid': 259613834, 'bvid': 'BV1Ka411d7aJ', 'artist': '琴风醉月', 'title': '全网最好的男声版《后来》,后来就再也没有后来了', 'alias': '后来', 'album': 'BV1Ka411d7aJ', 'artwork': 'http://i2.hdslb.com/bfs/archive/3b669db5893245c5d314f33ae7dcc71a4e34de55.jpg', 'duration': 290, 'tags': ['吉他弹唱', '街头艺人', '不修音挑战赛', '不修音挑战'], 'date': '2022-08-17', 'platform': 'bilibili'}, {'id': 'BV14o4y187UA', 'aid': 397444210, 'bvid': 'BV14o4y187UA', 'artist': 'COYMusicChannel', 'title': '半吨兄弟 - 后来『后来我总算学会了如何去爱』【原唱:刘若英】(动态歌词/Lyrics Video/无损音质/4k)', 'album': 'BV14o4y187UA', 'artwork': 'http://i0.hdslb.com/bfs/archive/323684f643b16274f32d5ed279afe5f7cf6c1c76.jpg', 'duration': 249, 'tags': ['后来完整版', '半吨兄弟 后来 完整版', '4K', '半吨兄弟 后来', '后来 半吨兄弟', '后来', '歌曲', '后来原唱', '半吨兄弟', '后来我总算学会了如何去爱'], 'date': '2023-04-19', 'platform': 'bilibili'}, {'id': 'BV1Q6tV68EK5', 'aid': 117195799535377, 'bvid': 'BV1Q6tV68EK5', 'artist': '微醺buff', 'title': '【4K Hi-Res】后来 (对唱R&B Ver.)|原唱 刘若英|「后来终于在眼泪中明白 有些人 一旦错过就不再」', 'album': 'BV1Q6tV68EK5', 'artwork': 'http://i0.hdslb.com/bfs/archive/ca5ca2b16815009ecf2c2d22fc1196ffeb332538.jpg', 'duration': 285, 'tags': ['AI音乐征集大赛', 'HI-RES', '微醺', 'R&B', '高音质', '治愈', '刘若英', '后来', '翻唱', '合唱'], 'date': '2026-09-01', 'platform': 'bilibili'}, {'id': 'BV1zr8s6jEDf', 'aid': 117142699712432, 'bvid': 'BV1zr8s6jEDf', 'artist': '八十万刁民总教头', 'title': '[SUNO V5.5] 《后来》刘若英 AI翻唱 “后来我总算学会了如何释怀 可惜那誓言散落在风中尘埃”', 'alias': '后来', 'album': 'BV1zr8s6jEDf', 'artwork': 'http://i2.hdslb.com/bfs/archive/23a0a0075a93c946364f91758de6b3073259bfcf.jpg', 'duration': 319, 'tags': ['AI翻唱', 'COVER', '刘若英', '后来', '翻唱'], 'date': '2026-08-23', 'platform': 'bilibili'}, {'id': 'BV1h5KM64EpQ', 'aid': 116942446788749, 'bvid': 'BV1h5KM64EpQ', 'artist': 'Agroce', 'title': '【摇滚现场】后来-Suno Hi-Res音质', 'album': 'BV1h5KM64EpQ', 'artwork': 'http://i0.hdslb.com/bfs/archive/2c085c2fa356d264a8127720c4f00d2cb0146824.jpg', 'duration': 341, 'tags': ['Suno', 'hi-Res', '摇滚现场', '后来'], 'date': '2026-07-19', 'platform': 'bilibili'}, {'id': 'BV1eK4y1U71Y', 'aid': 929682959, 'bvid': 'BV1eK4y1U71Y', 'artist': 'AK老黄瓜', 'title': '〖4K·LIVE〗张敬轩现场演绎《后来》最佳男声版!再听已是曲中人~', 'alias': '后来', 'album': 'BV1eK4y1U71Y', 'artwork': 'http://i2.hdslb.com/bfs/archive/e685d9004a5acb9efc401a40b93d78b41d21bec5.jpg', 'duration': 331, 'tags': ['经典', '华语现场', '打卡挑战', '张敬轩', '开口脆', 'LIVE', '4K', '后来'], 'date': '2021-03-19', 'platform': 'bilibili'}, {'id': 'BV1gs411V7QP', 'aid': 26139027, 'bvid': 'BV1gs411V7QP', 'artist': '一个地黄瓜', 'title': '万人合唱《后来》,不觉泪目!', 'alias': '后来', 'album': 'BV1gs411V7QP', 'artwork': 'http://i2.hdslb.com/bfs/archive/cfcbae9c1024811486bb7931368f6d34b3a181df.png', 'duration': 223, 'tags': ['合唱', '治愈向'], 'date': '2018-07-04', 'platform': 'bilibili'}, {'id': 'BV1kw411y7AK', 'aid': 319479691, 'bvid': 'BV1kw411y7AK', 'artist': '遥远与晴music', 'title': '【无损音质】《后来》- 刘若英“后来 我总算学会了如何去爱 可惜你早已远去消失在人海~”', 'alias': '后来', 'album': 'BV1kw411y7AK', 'artwork': 'http://i0.hdslb.com/bfs/archive/5d7104331b02b4d93e32784ad46b32d641ab7a47.jpg', 'duration': 342, 'tags': ['后来', '情感歌曲', '音乐分享官', '音乐分享官第八期', '无损音质', '听歌', '歌曲', '音乐', '音乐可视化'], 'date': '2023-10-10', 'platform': 'bilibili'}, {'id': 'BV1wWhPzGEAf', 'aid': 114960101349540, 'bvid': 'BV1wWhPzGEAf', 'artist': '饺子WTF', 'title': '【8D环绕混响🎧】有些人 一旦错过就不再.#戴上耳机 #后来 #音乐分享', 'album': 'BV1wWhPzGEAf', 'artwork': 'http://i1.hdslb.com/bfs/archive/b908892b24d9217d697a335a02c959b16187f687.jpg', 'duration': 333, 'tags': ['高音质', '戴上耳机', '后来', '歌单', '音乐分享', '8D环绕', '刘若英'], 'date': '2025-08-03', 'platform': 'bilibili'}, {'id': 'BV1SCmEBXEUv', 'aid': 115705345416123, 'bvid': 'BV1SCmEBXEUv', 'artist': '一只贪吃猫的鱼', 'title': '大头针翻唱《后来》完整版 老歌新唱 人为什么年少时 一定要让心爱的人受伤', 'alias': '后来', 'album': 'BV1SCmEBXEUv', 'artwork': 'http://i2.hdslb.com/bfs/archive/89999bae07541cdc8db533e95200e39ca8099559.jpg', 'duration': 252, 'tags': ['全能音乐挑战赛', '后来', '经典老歌', '完整版'], 'date': '2025-12-12', 'platform': 'bilibili'}, {'id': 'BV1rp4y177Xb', 'aid': 958084201, 'bvid': 'BV1rp4y177Xb', 'artist': '杰克凯鲁亚克1', 'title': '【4k】刘若英《后来》万人大合唱', 'alias': '后来', 'album': 'BV1rp4y177Xb', 'artwork': 'http://i1.hdslb.com/bfs/archive/8f0feccac434382d17460772677f8a4813143e42.jpg', 'duration': 353, 'tags': ['华语现场', '音乐分享官第八期', '90后', 'LIVE', '音乐分享官', '后来', '刘若英', '4K', '大合唱', '怀旧音乐', '80后'], 'date': '2023-09-03', 'platform': 'bilibili'}, {'id': 'BV1MW411L7Kr', 'aid': 22541495, 'bvid': 'BV1MW411L7Kr', 'artist': 'Dear---迪丽热巴', 'title': '《后来2018》万人大合唱 电影《后来的我们》致敬曲', 'alias': '后来2018', 'album': 'BV1MW411L7Kr', 'artwork': 'http://i0.hdslb.com/bfs/archive/9c576da463478b6a763015758ed794e679f7d9bf.jpg', 'duration': 222, 'tags': ['翻唱', '单曲', '怀旧', '后来', '开口跪', '经典', '歌曲', '音乐', 'MV', '刘若英'], 'date': '2018-04-25', 'platform': 'bilibili'}, {'id': 'BV1vqHGzwEML', 'aid': 115309939793452, 'bvid': 'BV1vqHGzwEML', 'artist': '一半耳机给你', 'title': '田园 - 后来的后来「后来的我们没有结果 后来的你没有再联络」【动态歌词】♪', 'album': 'BV1vqHGzwEML', 'artwork': 'http://i2.hdslb.com/bfs/archive/8895fa0b0b4a8c055f28acc405ee30c4d2b65697.jpg', 'duration': 204, 'tags': ['沉默', '敷衍', '结果', '折磨', '后来的后来', '田园', '联络', '索尼原创音浪季', '生活', '过客'], 'date': '2025-10-03', 'platform': 'bilibili'}, {'id': 'BV1sv4y1D71A', 'aid': 562186840, 'bvid': 'BV1sv4y1D71A', 'artist': '酷狗音乐', 'title': '【晚八点音乐会】毛不易翻唱《后来》,毛毛陪你回忆过去的故事!', 'alias': '后来', 'album': 'BV1sv4y1D71A', 'artwork': 'http://i2.hdslb.com/bfs/archive/8d21c17776ed39ac8bf309bea1607c74103652e1.jpg', 'duration': 199, 'tags': ['演唱会', '后来', '毛不易', 'LIVE', '音乐会', '晚八点', '京东', '刘若英', '华语现场', '音乐现场'], 'date': '2022-10-31', 'platform': 'bilibili'}, {'id': 'X7CrH0Kr16A', 'title': '【纯享】全场飙泪合唱《后来》张杰艾怡良哭成泪人 | 声生不息宝岛季 EP3 Infinity and Beyond 2023 | MangoTV', 'artist': '湖南卫视芒果TV官方频道 China HunanTV Official Channel', 'artwork': 'https://i.ytimg.com/vi/X7CrH0Kr16A/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDQLzZOIf_DS78Z3bqtrG6Z7EPCvg', 'platform': 'Youtube'}, {'id': 'QSGnDDTnTzI', 'title': 'Rene Liu 刘若英【 Afterwards 后来 Hou Lai】', 'artist': 'Pandarin', 'artwork': 'https://i.ytimg.com/vi/QSGnDDTnTzI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC_ghg1Ov9YG7esR0fz6aXRdPucqw', 'platform': 'Youtube'}, {'id': 'i1yxiH_Lnss', 'title': '【摇滚现场】后来', 'artist': 'YilanToniOoki', 'artwork': 'https://i.ytimg.com/vi/i1yxiH_Lnss/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4AfoJgALQBYoCDAgAEAEYZSBSKEgwDw==&rs=AOn4CLAKN5BxW6XKVW38vKgSLRGXFUa0Cw', 'platform': 'Youtube'}, {'id': '9qdYgiOa3iE', 'title': '刘若英 - 《后来》 [歌词]', 'artist': '佳选歌曲 - 纯享歌词版好歌\u3000(JiaXuan Nice Songs - Lyrics Video)', 'artwork': 'https://i.ytimg.com/vi/9qdYgiOa3iE/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAQ7LoPhIqd9XbD9vwrdrreouRWaw', 'platform': 'Youtube'}, {'id': 'b5TLlnF6Wfc', 'title': 'Huang Xiaoyun 黄霄雲 – Later《后来》Live | Taste of Leshan Music Festival 2026.07.04', 'artist': 'Xiaoyun Heavenly Voice', 'artwork': 'https://i.ytimg.com/vi/b5TLlnF6Wfc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLADJ1FASqIvb1W0bkzjkjIOHwYz-g', 'platform': 'Youtube'}, {'id': 'AL_7jyuGNhc', 'title': '奶茶刘若英/劉若英 5首耳熟能详的歌曲合集,你会唱吗? 后来/为爱痴狂/很爱很爱你/当爱在靠近/原来你也在这里/', 'artist': '肥笨不肥', 'artwork': 'https://i.ytimg.com/vi/AL_7jyuGNhc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAFXitZULHhQR6Idr7WjXT1GrZypA', 'platform': 'Youtube'}, {'id': 'yfkK1DYtUPc', 'title': '男声版《后来》这男的唱出了撕心裂肺的感觉!', 'artist': 'GàChơiGame', 'artwork': 'https://i.ytimg.com/vi/yfkK1DYtUPc/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCtv0fxwq9-OzR2Iun7oLysFMSxXg', 'platform': 'Youtube'}, {'id': 't0igPuDjYUE', 'title': '劉若英 René Liu【後來 Later】Official Music Video', 'artist': '滾石唱片 ROCK RECORDS', 'artwork': 'https://i.ytimg.com/vi/t0igPuDjYUE/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLClpCfLGFCvIMHdPwYCMGoa6e-fow', 'platform': 'Youtube'}, {'id': '6CbR5K7GtI4', 'title': '劉若英唱《後來》大淚崩\u3000 感動哭到一度唱不下去', 'artist': 'Dt LIFESTYLE', 'artwork': 'https://i.ytimg.com/vi/6CbR5K7GtI4/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAHbstbw9kfArvME7V4BwVnnQjWGA', 'platform': 'Youtube'}, {'id': 'lnnAphGz-_w', 'title': '【ENG SUB】René Liu 劉若英【Later 後來】Official Music Video', 'artist': 'ROCK RECORDS English', 'artwork': 'https://i.ytimg.com/vi/lnnAphGz-_w/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA-2E24-z5ArAnhtDm26MJqUROZzA', 'platform': 'Youtube'}, {'id': 'KSy9BWniwv8', 'title': '劉若英 後來 無損音樂FLAC 歌詞LYRICS 純享', 'artist': 'MusicDelta', 'artwork': 'https://i.ytimg.com/vi/KSy9BWniwv8/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLD4mBXmEiTNqsuFeTgCi7h7wbXs0Q', 'platform': 'Youtube'}, {'id': 'B9_o4tEIrsk', 'title': '張敬軒 - 後來 (2009 Live)', 'artist': '張敬軒 Hins Cheung', 'artwork': 'https://i.ytimg.com/vi/B9_o4tEIrsk/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDhBGw-zcH5C2f_cf-APSCHPCMkCg', 'platform': 'Youtube'}, {'id': 'miN8U2dXdFs', 'title': '「後來」抖音翻唱 #後來 #抖音翻唱合集 #抖音翻唱', 'artist': 'TikTok Music Studio(和華娛樂)', 'artwork': 'https://i.ytimg.com/vi/miN8U2dXdFs/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4AdQGgALgA4oCDAgAEAEYZSBTKFEwDw==&rs=AOn4CLBbu2yXKtt8l6t_wv94E0tuuk8SSQ', 'platform': 'Youtube'}, {'id': 'SlS5YZE8UFI', 'title': '半噸兄弟 - 後來(原唱:劉若英)『後來 我總算學會了如何去愛,可惜你 早已遠去 消失在人海。』【動態歌詞MV】', 'artist': 'BLUE MUSIC', 'artwork': 'https://i.ytimg.com/vi/SlS5YZE8UFI/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLDyqL8qFxYipXIS8SgdGqKiL2bYsw', 'platform': 'Youtube'}, {'id': 'RUVhGrfzgDQ', 'title': '劉大壯 - 後來(Cover劉若英)(翻自 劉若英) 『後來終於在眼淚中明白』【動態歌詞Lyrics】', 'artist': 'Top Song', 'artwork': 'https://i.ytimg.com/vi/RUVhGrfzgDQ/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLAxcp9KBu0i1nwB59aIk8FxN3GpYw', 'platform': 'Youtube'}, {'id': 'zEbRxmTHWGE', 'title': '後來我們怎麼了?|劉若英 René Liu【後來 Later】滾石愛情故事 歌詞版 Lyrics MV 💔', 'artist': '滾石愛情故事 In Love', 'artwork': 'https://i.ytimg.com/vi/zEbRxmTHWGE/hq720.jpg?sqp=-oaymwEjCOgCEMoBSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLA-WepV1uIiAnMUB7skGaKCP3JYUA', 'platform': 'Youtube'}] [2026-09-16 21:43:09] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:43:09] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:43:09] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:43:09] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:43:09] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 后来 - 刘若英-sofakingood [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:后来 - 刘若英-sofakingood allow_download:True [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:600: 根据【后来 - 刘若英-sofakingood】找到歌曲【['后来 - 刘若英-sofakingood']】 [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:后来 - 刘若英-sofakingood 匹配数量:1 auto_index:None [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:513: cur_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1184: get_music_url name:后来 - 刘若英-sofakingood [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:后来 - 刘若英-sofakingood, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=bVv9Ui4Mp_g [2026-09-16 21:43:09] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=bVv9Ui4Mp_g [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:43:09] [0.6.1] [INFO] file.py:1142: [proxy:4106b7c8] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:09] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') [2026-09-16 21:43:09] [0.6.1] [INFO] file.py:1145: [proxy:4106b7c8] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:09] [0.6.1] [INFO] file.py:1173: [proxy:4106b7c8] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:09] [0.6.1] [INFO] file.py:1219: [proxy:4106b7c8] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:43:09] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "FV6Jreh5x8Y", "title": "\u540e\u6765 - \u5218\u82e5\u82f1", "artist": "sofakingood", "artwork": "https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789566189499"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566189499: False [2026-09-16 21:43:09] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:09] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:09] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:09] [0.6.1] [INFO] file.py:1267: [proxy:4106b7c8] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 content_type=application/json content_length=43 [2026-09-16 21:43:09] [0.6.1] [ERROR] file.py:1382: [proxy:4106b7c8] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:09] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:09] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:43:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:440: get_next_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:441: _play_next. name:后来 - 刘若英-sofakingood, cur_music:后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:后来 - 刘若英-sofakingood allow_download:True [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:600: 根据【后来 - 刘若英-sofakingood】找到歌曲【['后来 - 刘若英-sofakingood']】 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:后来 - 刘若英-sofakingood 匹配数量:1 auto_index:None [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:513: cur_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1184: get_music_url name:后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:后来 - 刘若英-sofakingood, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=Qd84WarF8-Q [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=Qd84WarF8-Q [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1142: [proxy:f9bc7473] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1145: [proxy:f9bc7473] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1173: [proxy:f9bc7473] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1219: [proxy:f9bc7473] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:43:10] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "FV6Jreh5x8Y", "title": "\u540e\u6765 - \u5218\u82e5\u82f1", "artist": "sofakingood", "artwork": "https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789566190251"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566190251: False [2026-09-16 21:43:10] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:10] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:10] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1267: [proxy:f9bc7473] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 content_type=application/json content_length=43 [2026-09-16 21:43:10] [0.6.1] [ERROR] file.py:1382: [proxy:f9bc7473] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:10] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:10] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:43:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:440: get_next_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:441: _play_next. name:后来 - 刘若英-sofakingood, cur_music:后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:后来 - 刘若英-sofakingood allow_download:True [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:600: 根据【后来 - 刘若英-sofakingood】找到歌曲【['后来 - 刘若英-sofakingood']】 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:后来 - 刘若英-sofakingood 匹配数量:1 auto_index:None [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:513: cur_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1184: get_music_url name:后来 - 刘若英-sofakingood [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:后来 - 刘若英-sofakingood, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=rU3yxoCMUl8 [2026-09-16 21:43:10] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=rU3yxoCMUl8 [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1142: [proxy:ef83b3be] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:10] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1145: [proxy:ef83b3be] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1173: [proxy:ef83b3be] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:10] [0.6.1] [INFO] file.py:1219: [proxy:ef83b3be] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:43:11] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "FV6Jreh5x8Y", "title": "\u540e\u6765 - \u5218\u82e5\u82f1", "artist": "sofakingood", "artwork": "https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789566191004"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566191004: False [2026-09-16 21:43:11] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:11] [0.6.1] [INFO] file.py:1267: [proxy:ef83b3be] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 content_type=application/json content_length=43 [2026-09-16 21:43:11] [0.6.1] [ERROR] file.py:1382: [proxy:ef83b3be] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:11] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:11] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:440: get_next_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:441: _play_next. name:后来 - 刘若英-sofakingood, cur_music:后来 - 刘若英-sofakingood [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:后来 - 刘若英-sofakingood allow_download:True [2026-09-16 21:43:11] [0.6.1] [INFO] music_library.py:600: 根据【后来 - 刘若英-sofakingood】找到歌曲【['后来 - 刘若英-sofakingood']】 [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:后来 - 刘若英-sofakingood 匹配数量:1 auto_index:None [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:513: cur_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:11] [0.6.1] [INFO] music_library.py:1184: get_music_url name:后来 - 刘若英-sofakingood [2026-09-16 21:43:11] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:11] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:后来 - 刘若英-sofakingood, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:11] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=hibhn7BqYpA [2026-09-16 21:43:11] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=hibhn7BqYpA [2026-09-16 21:43:11] [0.6.1] [INFO] file.py:1142: [proxy:555b74cf] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:11] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') [2026-09-16 21:43:11] [0.6.1] [INFO] file.py:1145: [proxy:555b74cf] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:11] [0.6.1] [INFO] file.py:1173: [proxy:555b74cf] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:11] [0.6.1] [INFO] file.py:1219: [proxy:555b74cf] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:43:11] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "FV6Jreh5x8Y", "title": "\u540e\u6765 - \u5218\u82e5\u82f1", "artist": "sofakingood", "artwork": "https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789566191758"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566191758: False [2026-09-16 21:43:11] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:11] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:11] [0.6.1] [INFO] file.py:1267: [proxy:555b74cf] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 content_type=application/json content_length=43 [2026-09-16 21:43:11] [0.6.1] [ERROR] file.py:1382: [proxy:555b74cf] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:11] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:11] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:440: get_next_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:441: _play_next. name:后来 - 刘若英-sofakingood, cur_music:后来 - 刘若英-sofakingood [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:后来 - 刘若英-sofakingood allow_download:True [2026-09-16 21:43:12] [0.6.1] [INFO] music_library.py:600: 根据【后来 - 刘若英-sofakingood】找到歌曲【['后来 - 刘若英-sofakingood']】 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:后来 - 刘若英-sofakingood 匹配数量:1 auto_index:None [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:513: cur_music 后来 - 刘若英-sofakingood [2026-09-16 21:43:12] [0.6.1] [INFO] music_library.py:1184: get_music_url name:后来 - 刘若英-sofakingood [2026-09-16 21:43:12] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:12] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:后来 - 刘若英-sofakingood, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:12] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=QLdAs6TL93Y [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=QLdAs6TL93Y [2026-09-16 21:43:12] [0.6.1] [INFO] file.py:1142: [proxy:7a42dd38] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:12] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') [2026-09-16 21:43:12] [0.6.1] [INFO] file.py:1145: [proxy:7a42dd38] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 [2026-09-16 21:43:12] [0.6.1] [INFO] file.py:1173: [proxy:7a42dd38] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:12] [0.6.1] [INFO] file.py:1219: [proxy:7a42dd38] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:12] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: Youtube [2026-09-16 21:43:12] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "Youtube", "musicItem": {"id": "FV6Jreh5x8Y", "title": "\u540e\u6765 - \u5218\u82e5\u82f1", "artist": "sofakingood", "artwork": "https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw", "platform": "Youtube"}, "quality": "standard", "id": "msg_1789566192511"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566192511: False [2026-09-16 21:43:12] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin Youtube: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:12] [0.6.1] [ERROR] online_music.py:1620: Plugin Youtube get_media_source failed: getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:12] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'FV6Jreh5x8Y', 'title': '后来 - 刘若英', 'artist': 'sofakingood', 'artwork': 'https://i.ytimg.com/vi/FV6Jreh5x8Y/hq720.jpg?sqp=-oaymwE9COgCEMoBSFryq4qpAy8IARUAAAAAGAElAADIQj0AgKJDeAHwAQH4Af4JgALQBYoCDAgAEAEYZSBTKEcwDw==&rs=AOn4CLD2PiVkTIlEaNL0N34zHTYY84BJFw', 'platform': 'Youtube'} [2026-09-16 21:43:12] [0.6.1] [INFO] file.py:1267: [proxy:7a42dd38] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJGVjZKcmVoNXg4WSIsICJ0aXRsZSI6ICJcdTU0MGVcdTY3NjUgLSBcdTUyMThcdTgyZTVcdTgyZjEiLCAiYXJ0aXN0IjogInNvZmFraW5nb29kIiwgImFydHdvcmsiOiAiaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9GVjZKcmVoNXg4WS9ocTcyMC5qcGc/c3FwPS1vYXltd0U5Q09nQ0VNb0JTRnJ5cTRxcEF5OElBUlVBQUFBQUdBRWxBQURJUWowQWdLSkRlQUh3QVFINEFmNEpnQUxRQllvQ0RBZ0FFQUVZWlNCVEtFY3dEdz09JnJzPUFPbjRDTEQyUGlWa1RJbEVhTkwwTjM0ekhUWVk4NEJKRnciLCAicGxhdGZvcm0iOiAiWW91dHViZSJ9 content_type=application/json content_length=43 [2026-09-16 21:43:12] [0.6.1] [ERROR] file.py:1382: [proxy:7a42dd38] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:12] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:12] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:43:12] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:43:12] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:12] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:12] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin Youtube: Cannot read properties of undefined (reading 'formats') [2026-09-16 21:43:13] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:43:13] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:43:13] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:13] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:43:13] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:13] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:43:13] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:43:19] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:后来 - 刘若英-sofakingood [2026-09-16 21:43:19] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:43:20] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:43:20] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:20] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:20] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:20] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:43:20] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:43:21] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:43:21] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:43:21] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:43:35] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:43:35] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:43:35] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ== [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:43:35] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:43:35] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 allow_download:True [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:600: 根据【《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学】找到歌曲【['《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学']】 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 匹配数量:1 auto_index:None [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:513: cur_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1184: get_music_url name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ== [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=JgvtExR9gnc [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=JgvtExR9gnc [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1142: [proxy:893b68ef] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIj [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1145: [proxy:893b68ef] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1173: [proxy:893b68ef] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1219: [proxy:893b68ef] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:43:35] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1zV411x7BH", "aid": 418381916, "bvid": "BV1zV411x7BH", "artist": "\u6881\u4e50\u89c2\u540c\u5b66", "title": "\u300a\u540e\u6765\u300b\u5218\u82e5\u82f1 MV 1080P 50\u5e27(CD\u97f3\u8f68)", "alias": "\u540e\u6765", "album": "BV1zV411x7BH", "artwork": "http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg", "duration": 341, "tags": ["MV", "\u56fd\u8bedMV", "\u6b4c\u66f2", "\u97f3\u4e50", "\u534e\u8bedMV", "\u542c\u6b4c", "\u540e\u6765", "\u9ad8\u97f3\u8d28", "\u5218\u82e5\u82f1", "\u7ecf\u5178\u8001\u6b4c"], "date": "2021-06-04", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566215112"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566215112: False [2026-09-16 21:43:35] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:35] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:35] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1267: [proxy:893b68ef] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBn content_type=application/json content_length=43 [2026-09-16 21:43:35] [0.6.1] [ERROR] file.py:1382: [proxy:893b68ef] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:35] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:35] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:440: get_next_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:441: _play_next. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, cur_music:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 allow_download:True [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:600: 根据【《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学】找到歌曲【['《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学']】 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 匹配数量:1 auto_index:None [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:513: cur_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1184: get_music_url name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ== [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=62We9y-HZkQ [2026-09-16 21:43:35] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=62We9y-HZkQ [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1142: [proxy:2849a822] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIj [2026-09-16 21:43:35] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1145: [proxy:2849a822] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1173: [proxy:2849a822] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:35] [0.6.1] [INFO] file.py:1219: [proxy:2849a822] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:43:35] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1zV411x7BH", "aid": 418381916, "bvid": "BV1zV411x7BH", "artist": "\u6881\u4e50\u89c2\u540c\u5b66", "title": "\u300a\u540e\u6765\u300b\u5218\u82e5\u82f1 MV 1080P 50\u5e27(CD\u97f3\u8f68)", "alias": "\u540e\u6765", "album": "BV1zV411x7BH", "artwork": "http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg", "duration": 341, "tags": ["MV", "\u56fd\u8bedMV", "\u6b4c\u66f2", "\u97f3\u4e50", "\u534e\u8bedMV", "\u542c\u6b4c", "\u540e\u6765", "\u9ad8\u97f3\u8d28", "\u5218\u82e5\u82f1", "\u7ecf\u5178\u8001\u6b4c"], "date": "2021-06-04", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566215867"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566215867: False [2026-09-16 21:43:36] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:36] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:36] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:36] [0.6.1] [INFO] file.py:1267: [proxy:2849a822] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBn content_type=application/json content_length=43 [2026-09-16 21:43:36] [0.6.1] [ERROR] file.py:1382: [proxy:2849a822] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:36] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:36] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:440: get_next_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:441: _play_next. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, cur_music:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 allow_download:True [2026-09-16 21:43:36] [0.6.1] [INFO] music_library.py:600: 根据【《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学】找到歌曲【['《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学']】 [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 匹配数量:1 auto_index:None [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:513: cur_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:36] [0.6.1] [INFO] music_library.py:1184: get_music_url name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:36] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:36] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ== [2026-09-16 21:43:36] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=eOdDxhDZCoQ [2026-09-16 21:43:36] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=eOdDxhDZCoQ [2026-09-16 21:43:36] [0.6.1] [INFO] file.py:1142: [proxy:fc6a46a1] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIj [2026-09-16 21:43:36] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') [2026-09-16 21:43:36] [0.6.1] [INFO] file.py:1145: [proxy:fc6a46a1] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu [2026-09-16 21:43:36] [0.6.1] [INFO] file.py:1173: [proxy:fc6a46a1] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:36] [0.6.1] [INFO] file.py:1219: [proxy:fc6a46a1] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:43:36] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1zV411x7BH", "aid": 418381916, "bvid": "BV1zV411x7BH", "artist": "\u6881\u4e50\u89c2\u540c\u5b66", "title": "\u300a\u540e\u6765\u300b\u5218\u82e5\u82f1 MV 1080P 50\u5e27(CD\u97f3\u8f68)", "alias": "\u540e\u6765", "album": "BV1zV411x7BH", "artwork": "http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg", "duration": 341, "tags": ["MV", "\u56fd\u8bedMV", "\u6b4c\u66f2", "\u97f3\u4e50", "\u534e\u8bedMV", "\u542c\u6b4c", "\u540e\u6765", "\u9ad8\u97f3\u8d28", "\u5218\u82e5\u82f1", "\u7ecf\u5178\u8001\u6b4c"], "date": "2021-06-04", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566216619"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566216619: False [2026-09-16 21:43:36] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:36] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:36] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:36] [0.6.1] [INFO] file.py:1267: [proxy:fc6a46a1] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBn content_type=application/json content_length=43 [2026-09-16 21:43:36] [0.6.1] [ERROR] file.py:1382: [proxy:fc6a46a1] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:36] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:36] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:43:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:440: get_next_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:441: _play_next. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, cur_music:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 allow_download:True [2026-09-16 21:43:37] [0.6.1] [INFO] music_library.py:600: 根据【《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学】找到歌曲【['《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学']】 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 匹配数量:1 auto_index:None [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:513: cur_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:37] [0.6.1] [INFO] music_library.py:1184: get_music_url name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:37] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:37] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ== [2026-09-16 21:43:37] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=7kw2jwSNqW0 [2026-09-16 21:43:37] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=7kw2jwSNqW0 [2026-09-16 21:43:37] [0.6.1] [INFO] file.py:1142: [proxy:e6e9ad2a] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIj [2026-09-16 21:43:37] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') [2026-09-16 21:43:37] [0.6.1] [INFO] file.py:1145: [proxy:e6e9ad2a] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu [2026-09-16 21:43:37] [0.6.1] [INFO] file.py:1173: [proxy:e6e9ad2a] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:37] [0.6.1] [INFO] file.py:1219: [proxy:e6e9ad2a] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:43:37] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1zV411x7BH", "aid": 418381916, "bvid": "BV1zV411x7BH", "artist": "\u6881\u4e50\u89c2\u540c\u5b66", "title": "\u300a\u540e\u6765\u300b\u5218\u82e5\u82f1 MV 1080P 50\u5e27(CD\u97f3\u8f68)", "alias": "\u540e\u6765", "album": "BV1zV411x7BH", "artwork": "http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg", "duration": 341, "tags": ["MV", "\u56fd\u8bedMV", "\u6b4c\u66f2", "\u97f3\u4e50", "\u534e\u8bedMV", "\u542c\u6b4c", "\u540e\u6765", "\u9ad8\u97f3\u8d28", "\u5218\u82e5\u82f1", "\u7ecf\u5178\u8001\u6b4c"], "date": "2021-06-04", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566217371"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566217371: False [2026-09-16 21:43:37] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:37] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:37] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:37] [0.6.1] [INFO] file.py:1267: [proxy:e6e9ad2a] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBn content_type=application/json content_length=43 [2026-09-16 21:43:37] [0.6.1] [ERROR] file.py:1382: [proxy:e6e9ad2a] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:37] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:37] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:440: get_next_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:441: _play_next. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, cur_music:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 allow_download:True [2026-09-16 21:43:38] [0.6.1] [INFO] music_library.py:600: 根据【《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学】找到歌曲【['《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学']】 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 匹配数量:1 auto_index:None [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:513: cur_music 《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:38] [0.6.1] [INFO] music_library.py:1184: get_music_url name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:38] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:43:38] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ== [2026-09-16 21:43:38] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=b03AAE83WPg [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=b03AAE83WPg [2026-09-16 21:43:38] [0.6.1] [INFO] file.py:1142: [proxy:5c3ede79] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIj [2026-09-16 21:43:38] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') [2026-09-16 21:43:38] [0.6.1] [INFO] file.py:1145: [proxy:5c3ede79] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBnIiwgImR1cmF0aW9uIjogMzQxLCAidGFncyI6IFsiTVYiLCAiXHU1NmZkXHU4YmVkTVYiLCAiXHU2YjRjXHU2NmYyIiwgIlx1OTdmM1x1NGU1MCIsICJcdTUzNGVcdThiZWRNViIsICJcdTU0MmNcdTZiNGMiLCAiXHU1NDBlXHU2NzY1IiwgIlx1OWFkOFx1OTdmM1x1OGQyOCIsICJcdTUyMThcdTgyZTVcdTgyZjEiLCAiXHU3ZWNmXHU1MTc4XHU4MDAxXHU2YjRjIl0sICJkYXRlIjogIjIwMjEtMDYtMDQiLCAicGxhdGZvcm0iOiAiYmlsaWJpbGkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu [2026-09-16 21:43:38] [0.6.1] [INFO] file.py:1173: [proxy:5c3ede79] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:43:38] [0.6.1] [INFO] file.py:1219: [proxy:5c3ede79] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcu headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:43:38] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: bilibili [2026-09-16 21:43:38] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "bilibili", "musicItem": {"id": "BV1zV411x7BH", "aid": 418381916, "bvid": "BV1zV411x7BH", "artist": "\u6881\u4e50\u89c2\u540c\u5b66", "title": "\u300a\u540e\u6765\u300b\u5218\u82e5\u82f1 MV 1080P 50\u5e27(CD\u97f3\u8f68)", "alias": "\u540e\u6765", "album": "BV1zV411x7BH", "artwork": "http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg", "duration": 341, "tags": ["MV", "\u56fd\u8bedMV", "\u6b4c\u66f2", "\u97f3\u4e50", "\u534e\u8bedMV", "\u542c\u6b4c", "\u540e\u6765", "\u9ad8\u97f3\u8d28", "\u5218\u82e5\u82f1", "\u7ecf\u5178\u8001\u6b4c"], "date": "2021-06-04", "platform": "bilibili"}, "quality": "standard", "id": "msg_1789566218122"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:38] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566218122: False [2026-09-16 21:43:38] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin bilibili: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:38] [0.6.1] [ERROR] online_music.py:1620: Plugin bilibili get_media_source failed: getMediaSource failed: getMediaSource failed in plugin bilibili: Request failed with status code 412 [2026-09-16 21:43:38] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1zV411x7BH', 'aid': 418381916, 'bvid': 'BV1zV411x7BH', 'artist': '梁乐观同学', 'title': '《后来》刘若英 MV 1080P 50帧(CD音轨)', 'alias': '后来', 'album': 'BV1zV411x7BH', 'artwork': 'http://i0.hdslb.com/bfs/archive/4bd2d4cc597f5820378b757781680dc2e5496957.jpg', 'duration': 341, 'tags': ['MV', '国语MV', '歌曲', '音乐', '华语MV', '听歌', '后来', '高音质', '刘若英', '经典老歌'], 'date': '2021-06-04', 'platform': 'bilibili'} [2026-09-16 21:43:38] [0.6.1] [INFO] file.py:1267: [proxy:5c3ede79] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYWlkIjogNDE4MzgxOTE2LCAiYnZpZCI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0aXN0IjogIlx1Njg4MVx1NGU1MFx1ODljMlx1NTQwY1x1NWI2NiIsICJ0aXRsZSI6ICJcdTMwMGFcdTU0MGVcdTY3NjVcdTMwMGJcdTUyMThcdTgyZTVcdTgyZjEgTVYgMTA4MFAgNTBcdTVlMjcoQ0RcdTk3ZjNcdThmNjgpIiwgImFsaWFzIjogIlx1NTQwZVx1Njc2NSIsICJhbGJ1bSI6ICJCVjF6VjQxMXg3QkgiLCAiYXJ0d29yayI6ICJodHRwOi8vaTAuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzRiZDJkNGNjNTk3ZjU4MjAzNzhiNzU3NzgxNjgwZGMyZTU0OTY5NTcuanBn content_type=application/json content_length=43 [2026-09-16 21:43:38] [0.6.1] [ERROR] file.py:1382: [proxy:5c3ede79] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:43:38] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:43:38] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:43:38] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:43:38] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:38] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:38] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:40] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:43:40] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:43:40] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:40] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:43:40] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:43:40] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:43:40] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:43:46] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:《后来》刘若英 MV 1080P 50帧(CD音轨)-梁乐观同学 [2026-09-16 21:43:46] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:43:47] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:43:47] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:43:47] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:43:47] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:43:47] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:43:47] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:43:48] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 68, "loop_type": 2 }'}} [2026-09-16 21:43:48] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:43:48] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789566325258"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566325258: True [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789566325560"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566325560: True [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:45:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789566325861"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566325861: True [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789566326162"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566326162: True [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789566326463"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566326463: True [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:45:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789566326764"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566326764: True [2026-09-16 21:45:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 21:45:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:45:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u97f3\u60a6\u53f0", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageNum = 20;\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d;\n return {\n id: item.id,\n title: item.title,\n artist: (item === null || item === void 0 ? void 0 : item.allArtistNames) ||\n ((_b = (_a = item.artists) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (s) => s.name).join(\", \")) ||\n ((_c = item.user) === null || _c === void 0 ? void 0 : _c.niceName),\n artwork: item === null || item === void 0 ? void 0 : item.headImg,\n urls: (_d = item === null || item === void 0 ? void 0 : item.fullClip) === null || _d === void 0 ? void 0 : _d.urls,\n };\n}\nfunction formatArtistItem(item) {\n return {\n id: item.id,\n name: item.name,\n avatar: item.headImg,\n };\n}\nlet lastQuery;\nlet lastMusicId;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n lastMusicId = 0;\n }\n lastQuery = query;\n let data = JSON.stringify({\n searchType: \"MV\",\n key: query,\n sinceId: lastMusicId,\n size: pageNum,\n requestTagRows: [\n {\n key: \"sortType\",\n chosenTags: [\"HOTTEST\"],\n },\n {\n key: \"source\",\n chosenTags: [\"-1\"],\n },\n {\n key: \"duration\",\n chosenTags: [\"-1\"],\n },\n ],\n });\n let config = {\n method: \"post\",\n maxBodyLength: Infinity,\n url: \"https://search-api.yinyuetai.com/search/get_search_result.json\",\n headers: {\n referrer: \"https://www.yinyuetai.com/\",\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n wua: \"YYT/1.0.0 (WEB;web;11;zh-CN;kADiV2jNJFy2ryvuyB5Ne)\",\n },\n data: data,\n };\n const response = (await axios_1.default.request(config)).data.data;\n lastMusicId = response[response.length - 1].id;\n return {\n isEnd: pageNum > response.length,\n data: response.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n let url;\n if (quality === \"standard\") {\n url = musicItem.urls.find((it) => it.streamType === 5).url;\n }\n else if (quality === \"high\") {\n url = musicItem.urls.find((it) => it.streamType === 1).url;\n }\n return {\n url,\n };\n}\nmodule.exports = {\n platform: \"\u97f3\u60a6\u53f0\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/yinyuetai/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789566327065"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 21:45:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 音悦台, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:27] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 21:45:27] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 21:45:57] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Message msg_1789566327065 timeout [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:57] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDAV", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst webdav_1 = require(\"webdav\");\nlet cachedData = {};\nfunction getClient() {\n var _a, _b, _c;\n const { url, username, password, searchPath } = (_b = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables) === null || _a === void 0 ? void 0 : _a.call(env)) !== null && _b !== void 0 ? _b : {};\n if (!(url && username && password)) {\n return null;\n }\n if (!(cachedData.url === url &&\n cachedData.username === username &&\n cachedData.password === password &&\n cachedData.searchPath === searchPath)) {\n cachedData.url = url;\n cachedData.username = username;\n cachedData.password = password;\n cachedData.searchPath = searchPath;\n cachedData.searchPathList = (_c = searchPath === null || searchPath === void 0 ? void 0 : searchPath.split) === null || _c === void 0 ? void 0 : _c.call(searchPath, \",\");\n cachedData.cacheFileList = null;\n }\n return (0, webdav_1.createClient)(url, {\n authType: webdav_1.AuthType.Password,\n username,\n password,\n });\n}\nasync function searchMusic(query) {\n var _a, _b;\n const client = getClient();\n if (!cachedData.cacheFileList) {\n const searchPathList = ((_a = cachedData.searchPathList) === null || _a === void 0 ? void 0 : _a.length)\n ? cachedData.searchPathList\n : [\"/\"];\n let result = [];\n for (let search of searchPathList) {\n try {\n const fileItems = (await client.getDirectoryContents(search)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n result = [...result, ...fileItems];\n }\n catch (_c) { }\n }\n cachedData.cacheFileList = result;\n }\n return {\n isEnd: true,\n data: ((_b = cachedData.cacheFileList) !== null && _b !== void 0 ? _b : [])\n .filter((it) => it.basename.includes(query))\n .map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nasync function getTopLists() {\n getClient();\n const data = {\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: (cachedData.searchPathList || []).map((it) => ({\n title: it,\n id: it,\n })),\n };\n return [data];\n}\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n const fileItems = (await client.getDirectoryContents(topListItem.id)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n return {\n musicList: fileItems.map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"\u732b\u5934\u732b\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\",\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n },\n ],\n version: \"0.0.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/webdav/index.js\",\n cacheControl: \"no-cache\",\n search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n },\n getTopLists,\n getTopListDetail,\n getMediaSource(musicItem) {\n const client = getClient();\n return {\n url: client.getFileDownloadLink(musicItem.id),\n };\n },\n};", "id": "msg_1789566357095"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:57] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDAV, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566357095: False [2026-09-16 21:45:57] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:57] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "bilibili", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"bilibili\",\n appVersion: \">=0.0\",\n version: \"0.2.3\",\n author: \"\u732b\u5934\u732b\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/bilibili/index.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789566357499"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 21:45:57] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: bilibili, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566357499: True [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: bilibili [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:45:57] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:57] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u7f51", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://zh.followlyrics.com/search', {\n params: {\n name: query,\n type: 'song'\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.table.table-striped > tbody');\n const items = results.children('tr');\n const data = items.map((index, el) => {\n const tds = $(el).children();\n const title = $(tds.get(0)).text().trim();\n const artist = $(tds.get(1)).text().trim();\n const album = $(tds.get(2)).text().trim();\n const id = $(tds.get(3)).children('a').attr('href');\n return {\n title,\n artist,\n album,\n id\n };\n }).toArray();\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('div#lyrics').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u7f51\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789566357801"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:57] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词网, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566357801: True [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词网 [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Navidrome", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst pageSize = 25;\nasync function httpGet(urlPath, params) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n console.log(userVariables);\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const preParams = {\n u: username,\n s: salt,\n t: CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex),\n c: \"MusicFree\",\n v: \"1.14.1\",\n f: \"json\",\n };\n return (await axios_1.default.get(`${url}/rest/${urlPath}`, {\n params: Object.assign(Object.assign({}, preParams), params),\n })).data;\n}\nfunction formatMusicItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatAlbumItem(it) {\n return Object.assign(Object.assign({}, it), { artwork: it.coverArt });\n}\nfunction formatArtistItem(it) {\n return Object.assign(Object.assign({}, it), { avatar: it.artistImageUrl });\n}\nasync function searchMusic(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function searchAlbum(query, page) {\n const data = await httpGet('search2', {\n query,\n albumCount: pageSize,\n albumOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.album;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatAlbumItem)\n };\n}\nasync function searchArtist(query, page) {\n const data = await httpGet('search2', {\n query,\n songCount: pageSize,\n songOffset: (page - 1) * pageSize\n });\n const songs = data['subsonic-response'].searchResult2.song;\n return {\n isEnd: songs.length < pageSize,\n data: songs.map(formatMusicItem)\n };\n}\nasync function getAlbumInfo(albumItem) {\n const data = await httpGet('getAlbum', {\n id: albumItem.id\n });\n return {\n isEnd: true,\n data: data['subsonic-response'].album.song.map(formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"Navidrome\",\n version: \"0.0.0\",\n author: '\u732b\u5934\u732b',\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/navidrome/index.js\",\n cacheControl: \"no-cache\",\n userVariables: [\n {\n key: \"url\",\n name: \"\u670d\u52a1\u5668\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n },\n ],\n supportedSearchType: [\"music\", \"album\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n async getMediaSource(musicItem) {\n var _a;\n const userVariables = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables()) !== null && _a !== void 0 ? _a : {};\n let { url, username, password } = userVariables;\n if (!(url && username && password)) {\n return null;\n }\n if (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n url = `http://${url}`;\n }\n const salt = Math.random().toString(16).slice(2);\n const urlObj = new URL(`${url}/rest/stream`);\n urlObj.searchParams.append('u', username);\n urlObj.searchParams.append('s', salt);\n urlObj.searchParams.append('t', CryptoJs.MD5(`${password}${salt}`).toString(CryptoJs.enc.Hex));\n urlObj.searchParams.append('c', 'MusicFree');\n urlObj.searchParams.append('v', '1.14.1');\n urlObj.searchParams.append('f', 'json');\n urlObj.searchParams.append('id', musicItem.id);\n return {\n url: urlObj.toString()\n };\n }\n};", "id": "msg_1789566358102"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Navidrome, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566358102: True [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Navidrome [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:45:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Youtube", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: item.videoId,\n title: (_b = (_a = item.title.runs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text,\n artist: (_d = (_c = item.ownerText.runs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text,\n artwork: (_g = (_f = (_e = item === null || item === void 0 ? void 0 : item.thumbnail) === null || _e === void 0 ? void 0 : _e.thumbnails) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.url,\n };\n}\nlet lastQuery;\nlet musicContinToken;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n musicContinToken = undefined;\n }\n lastQuery = query;\n let data = JSON.stringify({\n context: {\n client: {\n hl: \"zh-CN\",\n gl: \"US\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0,gzip(gfe)\",\n clientName: \"WEB\",\n clientVersion: \"2.20231121.08.00\",\n osName: \"Windows\",\n osVersion: \"10.0\",\n platform: \"DESKTOP\",\n userInterfaceTheme: \"USER_INTERFACE_THEME_LIGHT\",\n browserName: \"Edge Chromium\",\n browserVersion: \"119.0.0.0\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7\",\n screenWidthPoints: 1358,\n screenHeightPoints: 1012,\n screenPixelDensity: 1,\n screenDensityFloat: 1.2395833730697632,\n utcOffsetMinutes: 480,\n memoryTotalKbytes: \"8000000\",\n mainAppWebInfo: {\n pwaInstallabilityStatus: \"PWA_INSTALLABILITY_STATUS_UNKNOWN\",\n webDisplayMode: \"WEB_DISPLAY_MODE_BROWSER\",\n isWebNativeShareAvailable: true,\n },\n timeZone: \"Asia/Shanghai\",\n },\n user: {\n lockedSafetyMode: false,\n },\n request: {\n useSsl: true,\n internalExperimentFlags: [],\n },\n },\n query: musicContinToken ? undefined : query,\n continuation: musicContinToken || undefined,\n });\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/search?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"text/plain\",\n },\n data: data,\n };\n const response = (await (0, axios_1.default)(config)).data;\n const contents = response.contents.twoColumnSearchResultsRenderer.primaryContents\n .sectionListRenderer.contents;\n const isEndItem = contents.find((it) => {\n var _a, _b, _c;\n return ((_c = (_b = (_a = it.continuationItemRenderer) === null || _a === void 0 ? void 0 : _a.continuationEndpoint) === null || _b === void 0 ? void 0 : _b.continuationCommand) === null || _c === void 0 ? void 0 : _c.request) === \"CONTINUATION_REQUEST_TYPE_SEARCH\";\n });\n if (isEndItem) {\n musicContinToken =\n isEndItem.continuationItemRenderer.continuationEndpoint\n .continuationCommand.token;\n }\n const musicData = contents.find((it) => it.itemSectionRenderer)\n .itemSectionRenderer.contents;\n let resultMusicData = [];\n for (let i = 0; i < musicData.length; ++i) {\n if (musicData[i].videoRenderer) {\n resultMusicData.push(formatMusicItem(musicData[i].videoRenderer));\n }\n }\n return {\n isEnd: !isEndItem,\n data: resultMusicData,\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nlet cacheMediaSource = {\n id: null,\n urls: {},\n};\nfunction getQuality(label) {\n if (label === \"small\") {\n return \"standard\";\n }\n else if (label === \"tiny\") {\n return \"low\";\n }\n else if (label === \"medium\") {\n return \"high\";\n }\n else if (label === \"large\") {\n return \"super\";\n }\n else {\n return \"standard\";\n }\n}\nasync function getMediaSource(musicItem, quality) {\n var _a, _b;\n if (musicItem.id === cacheMediaSource.id) {\n return {\n url: cacheMediaSource.urls[quality],\n };\n }\n cacheMediaSource = {\n id: null,\n urls: {},\n };\n const data = {\n context: {\n client: {\n screenWidthPoints: 689,\n screenHeightPoints: 963,\n screenPixelDensity: 1,\n utcOffsetMinutes: 120,\n hl: \"en\",\n gl: \"GB\",\n remoteHost: \"1.1.1.1\",\n deviceMake: \"\",\n deviceModel: \"\",\n userAgent: \"com.google.android.apps.youtube.music/6.14.50 (Linux; U; Android 13; GB) gzip\",\n clientName: \"ANDROID_MUSIC\",\n clientVersion: \"6.14.50\",\n osName: \"Android\",\n osVersion: \"13\",\n originalUrl: \"https://www.youtube.com/tv?is_account_switch=1&hrld=1&fltor=1\",\n theme: \"CLASSIC\",\n platform: \"MOBILE\",\n clientFormFactor: \"UNKNOWN_FORM_FACTOR\",\n webpSupport: false,\n timeZone: \"Europe/Amsterdam\",\n acceptHeader: \"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8\",\n },\n user: { enableSafetyMode: false },\n request: {\n internalExperimentFlags: [],\n consistencyTokenJars: [],\n },\n },\n contentCheckOk: true,\n racyCheckOk: true,\n video_id: musicItem.id,\n };\n var config = {\n method: \"post\",\n url: \"https://www.youtube.com/youtubei/v1/player?prettyPrint=false\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n data: JSON.stringify(data),\n };\n const result = (await (0, axios_1.default)(config)).data;\n const formats = (_a = result.streamingData.formats) !== null && _a !== void 0 ? _a : [];\n const adaptiveFormats = (_b = result.streamingData.adaptiveFormats) !== null && _b !== void 0 ? _b : [];\n [...formats, ...adaptiveFormats].forEach((it) => {\n const q = getQuality(it.quality);\n if (q && it.url && !cacheMediaSource.urls[q]) {\n cacheMediaSource.urls[q] = it.url;\n }\n });\n return {\n url: cacheMediaSource.urls[quality],\n };\n}\nmodule.exports = {\n platform: \"Youtube\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/youtube/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789566358403"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Youtube, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566358403: True [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Youtube [2026-09-16 21:45:58] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'status': 'loaded', 'load_time': 1789566325.5596304, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789566325.8608644, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'status': 'loaded', 'load_time': 1789566326.1619, 'enabled': True}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'status': 'loaded', 'load_time': 1789566326.462895, 'enabled': True}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'status': 'loaded', 'load_time': 1789566326.7638805, 'enabled': True}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'status': 'loaded', 'load_time': 1789566327.0648766, 'enabled': True}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'status': 'loaded', 'load_time': 1789566357.8009205, 'enabled': True}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'status': 'loaded', 'load_time': 1789566358.1020539, 'enabled': True}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'status': 'loaded', 'load_time': 1789566358.4032402, 'enabled': True}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'status': 'loaded', 'load_time': 1789566358.70435, 'enabled': True}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 闻音酷我 [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789566376113"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566376113: True [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789566376414"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566376414: True [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789566376716"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566376716: True [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789566377017"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566377017: True [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789566377318"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566377318: True [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789566377619"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566377619: True [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:17] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'status': 'loaded', 'load_time': 1789566376.4138608, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789566376.715756, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'status': 'loaded', 'load_time': 1789566377.01689, 'enabled': True}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'status': 'loaded', 'load_time': 1789566377.3179054, 'enabled': True}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'status': 'loaded', 'load_time': 1789566377.618953, 'enabled': True}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'status': 'loaded', 'load_time': 1789566377.9201007, 'enabled': True}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:17] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:18] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.emit (node:events:520:35) [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:18] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async getTopListDetail (evalmachine.:58:21) { [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_RESPONSE', [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 21:46:19] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 21:46:20] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:21] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61', [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://studio-api.suno.ai/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 21:46:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:23] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 21:46:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: true, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 21:46:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0 HTTP/1.1\r\n' + [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 21:46:26] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\r\n' + [2026-09-16 21:46:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'host: studio-api.suno.ai\r\n' + [2026-09-16 21:46:27] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 21:46:27] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 5sing [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789566387416"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566387416: True [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789566387818"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566387818: True [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789566388120"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566388120: True [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789566388421"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566388421: True [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789566388722"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566388722: True [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789566389023"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566389023: True [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'status': 'loaded', 'load_time': 1789566387.8179193, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789566388.1197336, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'status': 'loaded', 'load_time': 1789566388.4208415, 'enabled': True}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'status': 'loaded', 'load_time': 1789566388.7219315, 'enabled': True}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'status': 'loaded', 'load_time': 1789566389.0230649, 'enabled': True}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'status': 'loaded', 'load_time': 1789566389.324122, 'enabled': True}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:29] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:29] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 21:46:29] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.emit (node:events:520:35) [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async getTopListDetail (evalmachine.:58:21) { [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_RESPONSE', [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 21:46:30] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 21:46:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 21:46:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin CCTV听音 [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:33] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:33] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61', [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:33] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://studio-api.suno.ai/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 21:46:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:46:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: true, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 21:46:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 21:46:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0 HTTP/1.1\r\n' + [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\r\n' + [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'host: studio-api.suno.ai\r\n' + [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _keepAliveTimeout: 0, [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onPendingData: [Function: nop], [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: Agent { [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function (anonymous)], [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: maybeEnableKeylog] [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype] { [2026-09-16 21:46:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 21:46:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] {}, [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype] { [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': [ [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: TLSSocket { [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: [Object], [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 21:46:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 21:46:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'studio-api.suno.ai', [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: [ReadableState], [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: [WritableState], [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: [TLSWrap], [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 21:46:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [Array], [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): [TLSWrap], [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin QQ Vip [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): [TLSWrap], [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:46] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): [Timeout], [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 1, [2026-09-16 21:46:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): [Object], [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.socketListener): true, [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.currentReq): [Writable] [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: } [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveMsecs: 1000, [2026-09-16 21:46:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxSockets: Infinity, [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxFreeSockets: 256, [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxTotalSockets: Infinity, [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: totalSocketCount: 1, [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentKeepAliveTimeoutBuffer: 1000, [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxCachedSessions: 100, [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sessionCache: { [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: map: { [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': Buffer(1258) [Uint8Array] [ [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 48, 130, 4, 230, 2, 1, 1, 2, 2, 3, 4, 4, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 2, 19, 2, 4, 32, 240, 221, 124, 31, 1, 163, 73, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 17, 40, 127, 31, 53, 203, 124, 179, 70, 219, 29, 43, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 154, 229, 223, 215, 102, 43, 197, 69, 76, 55, 49, 62, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 114, 4, 48, 43, 182, 182, 132, 238, 175, 90, 12, 190, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 120, 211, 87, 179, 35, 161, 225, 248, 51, 16, 70, 213, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 15, 115, 82, 101, 223, 147, 146, 95, 205, 44, 110, 31, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 91, 9, 175, 58, 128, 231, 36, 91, 107, 55, 195, 57, [2026-09-16 21:46:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 84, 7, 212, 161, [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ... 1158 more items [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: list: [ 'studio-api.suno.ai:443:::::::::::::::::::::' ] [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): false, [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socketPath: undefined, [2026-09-16 21:46:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxHeaderSize: undefined, [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: insecureHTTPParser: false, [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: '/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _ended: true, [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: res: IncomingMessage { [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: { [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: undefined, [2026-09-16 21:46:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function: handleStreamError], [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: [Function: handleStreamData], [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [ [Function: responseOnEnd], [Function: handleStreamEnd] ], [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: readable: undefined, [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function: handlerStreamAborted] [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 21:46:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 汽水vip [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:46:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:46:54] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:46:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:46:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 网易云 [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:47:04] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:04] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:47:04] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:47:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 网易音乐 [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:47:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:47:13] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:23] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:23] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:23] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 酷狗_念心 [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:47:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:47:24] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:47:25] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:25] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:47:25] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:47:27] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 21:47:27] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 21:47:34] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 酷我 [2026-09-16 21:47:34] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:47:34] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:47:34] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:47:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:47:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789566454912"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566454912: True [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789566455315"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566455315: True [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789566455616"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566455616: True [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:47:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789566455917"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566455917: True [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789566456219"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566456219: True [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789566456521"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566456521: True [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:47:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789566456823"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566456823: True [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789566457124"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566457124: True [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:47:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 21:47:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.emit (node:events:520:35) [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async getTopListDetail (evalmachine.:58:21) { [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_RESPONSE', [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:38] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 21:47:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 21:47:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61', [2026-09-16 21:47:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://studio-api.suno.ai/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:43] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: true, [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 21:47:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 21:47:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0 HTTP/1.1\r\n' + [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\r\n' + [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'host: studio-api.suno.ai\r\n' + [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 21:47:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _keepAliveTimeout: 0, [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onPendingData: [Function: nop], [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: Agent { [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function (anonymous)], [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: maybeEnableKeylog] [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:47:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype] { [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:48] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] {}, [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype] { [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': [ [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: TLSSocket { [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: [Object], [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 21:47:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 21:47:50] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:47:50] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:47:50] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 酷我 for keyword: 后来, type: music [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 21:47:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'studio-api.suno.ai', [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: [ReadableState], [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: [WritableState], [2026-09-16 21:47:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: [TLSWrap], [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 21:47:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [Array], [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): [TLSWrap], [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): [TLSWrap], [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): [Timeout], [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 21:47:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 1, [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): [Object], [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.socketListener): true, [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.currentReq): [Writable] [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: } [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveMsecs: 1000, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxSockets: Infinity, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxFreeSockets: 256, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxTotalSockets: Infinity, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: totalSocketCount: 1, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentKeepAliveTimeoutBuffer: 1000, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxCachedSessions: 100, [2026-09-16 21:47:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sessionCache: { [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: map: { [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': Buffer(1257) [Uint8Array] [ [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 48, 130, 4, 229, 2, 1, 1, 2, 2, 3, 4, 4, [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 2, 19, 2, 4, 32, 66, 250, 224, 229, 97, 186, 82, [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 225, 251, 21, 84, 66, 228, 236, 180, 204, 216, 125, 42, [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 166, 174, 52, 110, 39, 33, 195, 127, 21, 149, 26, 215, [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 99, 4, 48, 234, 133, 24, 233, 169, 84, 78, 28, 216, [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 44, 99, 13, 47, 98, 43, 187, 85, 100, 27, 128, 128, [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 209, 177, 255, 115, 213, 105, 14, 39, 98, 68, 28, 161, [2026-09-16 21:47:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 37, 28, 112, 201, 236, 33, 41, 219, 119, 183, 96, 95, [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 137, 146, 70, 161, [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ... 1157 more items [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: list: [ 'studio-api.suno.ai:443:::::::::::::::::::::' ] [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): false, [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:58] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socketPath: undefined, [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxHeaderSize: undefined, [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: insecureHTTPParser: false, [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: '/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _ended: true, [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: res: IncomingMessage { [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: { [2026-09-16 21:47:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: undefined, [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function: handleStreamError], [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: [Function: handleStreamData], [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [ [Function: responseOnEnd], [Function: handleStreamEnd] ], [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: readable: undefined, [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function: handlerStreamAborted] [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 21:48:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 21:48:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Node.js v24.14.1 [2026-09-16 21:48:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Message msg_1789566457429 timeout [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 网易音乐 for keyword: 后来, type: music [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 后来, type: music [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 后来, type: music [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 后来, type: music [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 后来, type: music [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 后来, type: music [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 后来, type: music [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 酷我 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 酷狗_念心 搜索失败: Plugin 酷狗_念心 not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 网易音乐 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 网易云 搜索失败: Plugin 网易云 not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 汽水vip 搜索失败: Plugin 汽水vip not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 QQ Vip 搜索失败: Plugin QQ Vip not found or not loaded [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 CCTV听音 搜索失败: Plugin CCTV听音 not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 5sing 搜索失败: Plugin 5sing not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 闻音酷我 搜索失败: Plugin 闻音酷我 not found or not loaded [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 bilibili 搜索失败: Plugin bilibili not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Plugin Navidrome not found or not loaded [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Plugin 歌词网 not found or not loaded [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:07] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:07] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:07] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'status': 'loaded', 'load_time': 1789566455.3146172, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789566455.6162963, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'status': 'loaded', 'load_time': 1789566455.9173527, 'enabled': True}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'status': 'loaded', 'load_time': 1789566456.2185578, 'enabled': True}, '酷我': {'status': 'loaded', 'load_time': 1789566456.5212684, 'enabled': True}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'status': 'loaded', 'load_time': 1789566456.823187, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789566457.1243436, 'enabled': True}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'status': 'loaded', 'load_time': 1789566457.4296737, 'enabled': True}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:48:15] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 酷我 for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 网易音乐 for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 快手 for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 猫耳FM for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin udio for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin suno for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 歌词千寻 for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 后来, type: music [2026-09-16 21:48:15] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 酷我 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 酷狗_念心 搜索失败: Plugin 酷狗_念心 not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 网易音乐 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 网易云 搜索失败: Plugin 网易云 not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 汽水vip 搜索失败: Plugin 汽水vip not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 QQ Vip 搜索失败: Plugin QQ Vip not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 CCTV听音 搜索失败: Plugin CCTV听音 not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 5sing 搜索失败: Plugin 5sing not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 闻音酷我 搜索失败: Plugin 闻音酷我 not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 WebDAV 搜索失败: Plugin WebDAV not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 bilibili 搜索失败: Plugin bilibili not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 Youtube 搜索失败: Plugin Youtube not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 音悦台 搜索失败: Plugin 音悦台 not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 快手 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 猫耳FM 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 udio 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 suno 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 Navidrome 搜索失败: Plugin Navidrome not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词千寻 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 歌词网 搜索失败: Plugin 歌词网 not found or not loaded [2026-09-16 21:48:15] [0.6.1] [ERROR] online_music.py:1327: 插件 Audiomack 搜索失败: Node.js process not available and restart failed [2026-09-16 21:48:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:18] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:18] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:18] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:23] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin Audiomack [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:24] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:24] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:24] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:27] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 21:48:27] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 21:48:28] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 歌词网 [2026-09-16 21:48:28] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:28] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:28] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:28] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789566508852"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566508852: True [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789566509253"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566509253: True [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789566509554"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566509554: True [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:29] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:29] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789566509856"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566509856: True [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789566510162"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566510162: True [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789566510463"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566510463: True [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "suno", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n host: \"studio-api.suno.ai\"\n};\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"1190bf92-10dc-4ce5-968a-7a377f37f984\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"08a079b2-a63b-4f9c-9f29-de3c1864ddef\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"845539aa-2a39-4cf5-b4ae-16d3fe159a77\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"6943c7ee-cbc5-4f72-bc4e-f3371a8be9d5\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6700\u65b0\u699c\",\n data: [\n {\n id: \"cc14084a-2622-4c4b-8258-1f6b4b4f54b3\",\n title: \"\u6700\u65b0\u699c\",\n },\n ],\n },\n {\n title: \"\u5176\u4ed6\u7c7b\u522b\",\n data: [\n {\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u52a8\u7269\u5f00\u4f1a\",\n },\n {\n id: '6713d315-3541-460d-8788-162cce241336',\n title: 'Lo-Fi'\n }\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n const result = (await axios_1.default.get(`https://studio-api.suno.ai/api/playlist/${topListItem.id}/?page=0`, {\n headers\n })).data;\n return {\n isEnd: true,\n musicList: result.playlist_clips.map(it => {\n var _a, _b;\n const clip = it.clip;\n return {\n id: clip.id,\n url: clip.audio_url,\n artwork: clip.image_large_url || clip.image_url,\n duration: (_a = clip.metadata) === null || _a === void 0 ? void 0 : _a.duration,\n title: clip.title,\n artist: clip.display_name,\n userId: clip.user_id,\n rawLrc: (_b = clip.metadata) === null || _b === void 0 ? void 0 : _b.prompt\n };\n })\n };\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"suno\",\n version: \"0.0.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/suno/index.js\",\n cacheControl: \"no-cache\",\n getTopLists,\n getTopListDetail,\n getLyric\n};\ngetTopListDetail({\n id: \"1ac7823f-8faf-474f-b14c-e4f7c7bb373f\",\n title: \"\u6700\u65b0\u699c\",\n}).then(e => console.log(e.musicList[0]));", "id": "msg_1789566510764"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: suno, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566510764: True [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: suno [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u97f3\u60a6\u53f0", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageNum = 20;\nfunction formatMusicItem(item) {\n var _a, _b, _c, _d;\n return {\n id: item.id,\n title: item.title,\n artist: (item === null || item === void 0 ? void 0 : item.allArtistNames) ||\n ((_b = (_a = item.artists) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (s) => s.name).join(\", \")) ||\n ((_c = item.user) === null || _c === void 0 ? void 0 : _c.niceName),\n artwork: item === null || item === void 0 ? void 0 : item.headImg,\n urls: (_d = item === null || item === void 0 ? void 0 : item.fullClip) === null || _d === void 0 ? void 0 : _d.urls,\n };\n}\nfunction formatArtistItem(item) {\n return {\n id: item.id,\n name: item.name,\n avatar: item.headImg,\n };\n}\nlet lastQuery;\nlet lastMusicId;\nasync function searchMusic(query, page) {\n if (query !== lastQuery || page === 1) {\n lastMusicId = 0;\n }\n lastQuery = query;\n let data = JSON.stringify({\n searchType: \"MV\",\n key: query,\n sinceId: lastMusicId,\n size: pageNum,\n requestTagRows: [\n {\n key: \"sortType\",\n chosenTags: [\"HOTTEST\"],\n },\n {\n key: \"source\",\n chosenTags: [\"-1\"],\n },\n {\n key: \"duration\",\n chosenTags: [\"-1\"],\n },\n ],\n });\n let config = {\n method: \"post\",\n maxBodyLength: Infinity,\n url: \"https://search-api.yinyuetai.com/search/get_search_result.json\",\n headers: {\n referrer: \"https://www.yinyuetai.com/\",\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n wua: \"YYT/1.0.0 (WEB;web;11;zh-CN;kADiV2jNJFy2ryvuyB5Ne)\",\n },\n data: data,\n };\n const response = (await axios_1.default.request(config)).data.data;\n lastMusicId = response[response.length - 1].id;\n return {\n isEnd: pageNum > response.length,\n data: response.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n let url;\n if (quality === \"standard\") {\n url = musicItem.urls.find((it) => it.streamType === 5).url;\n }\n else if (quality === \"high\") {\n url = musicItem.urls.find((it) => it.streamType === 1).url;\n }\n return {\n url,\n };\n}\nmodule.exports = {\n platform: \"\u97f3\u60a6\u53f0\",\n author: '\u732b\u5934\u732b',\n version: \"0.0.1\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/yinyuetai/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n};", "id": "msg_1789566511065"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 音悦台, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566511065: True [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 音悦台 [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDAV", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst webdav_1 = require(\"webdav\");\nlet cachedData = {};\nfunction getClient() {\n var _a, _b, _c;\n const { url, username, password, searchPath } = (_b = (_a = env === null || env === void 0 ? void 0 : env.getUserVariables) === null || _a === void 0 ? void 0 : _a.call(env)) !== null && _b !== void 0 ? _b : {};\n if (!(url && username && password)) {\n return null;\n }\n if (!(cachedData.url === url &&\n cachedData.username === username &&\n cachedData.password === password &&\n cachedData.searchPath === searchPath)) {\n cachedData.url = url;\n cachedData.username = username;\n cachedData.password = password;\n cachedData.searchPath = searchPath;\n cachedData.searchPathList = (_c = searchPath === null || searchPath === void 0 ? void 0 : searchPath.split) === null || _c === void 0 ? void 0 : _c.call(searchPath, \",\");\n cachedData.cacheFileList = null;\n }\n return (0, webdav_1.createClient)(url, {\n authType: webdav_1.AuthType.Password,\n username,\n password,\n });\n}\nasync function searchMusic(query) {\n var _a, _b;\n const client = getClient();\n if (!cachedData.cacheFileList) {\n const searchPathList = ((_a = cachedData.searchPathList) === null || _a === void 0 ? void 0 : _a.length)\n ? cachedData.searchPathList\n : [\"/\"];\n let result = [];\n for (let search of searchPathList) {\n try {\n const fileItems = (await client.getDirectoryContents(search)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n result = [...result, ...fileItems];\n }\n catch (_c) { }\n }\n cachedData.cacheFileList = result;\n }\n return {\n isEnd: true,\n data: ((_b = cachedData.cacheFileList) !== null && _b !== void 0 ? _b : [])\n .filter((it) => it.basename.includes(query))\n .map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nasync function getTopLists() {\n getClient();\n const data = {\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: (cachedData.searchPathList || []).map((it) => ({\n title: it,\n id: it,\n })),\n };\n return [data];\n}\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n const fileItems = (await client.getDirectoryContents(topListItem.id)).filter((it) => it.type === \"file\" && it.mime.startsWith(\"audio\"));\n return {\n musicList: fileItems.map((it) => ({\n title: it.basename,\n id: it.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\",\n })),\n };\n}\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"\u732b\u5934\u732b\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\",\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\",\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n },\n ],\n version: \"0.0.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/webdav/index.js\",\n cacheControl: \"no-cache\",\n search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n },\n getTopLists,\n getTopListDetail,\n getMediaSource(musicItem) {\n const client = getClient();\n return {\n url: client.getFileDownloadLink(musicItem.id),\n };\n },\n};", "id": "msg_1789566511367"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDAV, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566511367: False [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDAV: Module 'webdav' is not allowed or not installed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'status': 'loaded', 'load_time': 1789566509.2531865, 'enabled': True}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'status': 'loaded', 'load_time': 1789566509.5544007, 'enabled': True}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'status': 'loaded', 'load_time': 1789566509.855615, 'enabled': True}, '酷我': {'status': 'loaded', 'load_time': 1789566510.161587, 'enabled': True}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'status': 'loaded', 'load_time': 1789566510.463466, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789566510.7645338, 'enabled': True}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'status': 'loaded', 'load_time': 1789566511.0655942, 'enabled': True}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'status': 'loaded', 'load_time': 1789566511.3667061, 'enabled': True}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:31] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:31] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 21:48:32] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:32] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:32] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:32] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:32] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:32] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:32] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.emit (node:events:520:35) [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async getTopListDetail (evalmachine.:58:21) { [2026-09-16 21:48:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_RESPONSE', [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 21:48:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 21:48:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 21:48:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61', [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: host: 'studio-api.suno.ai', [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 歌词千寻 [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://studio-api.suno.ai/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:36] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:36] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:36] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:37] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: true, [2026-09-16 21:48:38] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 21:48:39] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0 HTTP/1.1\r\n' + [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\r\n' + [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'host: studio-api.suno.ai\r\n' + [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 21:48:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _keepAliveTimeout: 0, [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onPendingData: [Function: nop], [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: Agent { [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function (anonymous)], [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: maybeEnableKeylog] [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:41] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype] { [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin Navidrome [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:42] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:42] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 21:48:42] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] {}, [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype] { [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': [ [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: TLSSocket { [2026-09-16 21:48:43] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: [Object], [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'studio-api.suno.ai', [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 21:48:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'studio-api.suno.ai', [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 21:48:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: [ReadableState], [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: [WritableState], [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: [TLSWrap], [2026-09-16 21:48:46] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [Array], [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): [TLSWrap], [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): [TLSWrap], [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): [Timeout], [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 21:48:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 1, [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): [Object], [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.socketListener): true, [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.currentReq): [Writable] [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: } [2026-09-16 21:48:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveMsecs: 1000, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxSockets: Infinity, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxFreeSockets: 256, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxTotalSockets: Infinity, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: totalSocketCount: 1, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentKeepAliveTimeoutBuffer: 1000, [2026-09-16 21:48:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxCachedSessions: 100, [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sessionCache: { [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: map: { [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'studio-api.suno.ai:443:::::::::::::::::::::': Buffer(1257) [Uint8Array] [ [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 48, 130, 4, 229, 2, 1, 1, 2, 2, 3, 4, 4, [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 2, 19, 2, 4, 32, 150, 255, 15, 15, 79, 189, 106, [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 5sing [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 31, 106, 249, 19, 97, 158, 164, 247, 252, 108, 155, 165, [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 127, 1, 101, 134, 8, 50, 82, 133, 151, 90, 233, 24, [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 200, 4, 48, 150, 135, 73, 122, 13, 255, 76, 85, 205, [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 58, 61, 165, 228, 78, 88, 235, 62, 29, 189, 243, 128, [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:51] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:51] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:52] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 46, 3, 54, 37, 89, 111, 87, 185, 74, 196, 19, 115, [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 45, 139, 125, 136, 220, 218, 81, 199, 80, 153, 69, 202, [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 114, 240, 142, 161, [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ... 1157 more items [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: list: [ 'studio-api.suno.ai:443:::::::::::::::::::::' ] [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): false, [2026-09-16 21:48:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socketPath: undefined, [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxHeaderSize: undefined, [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: insecureHTTPParser: false, [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: '/api/playlist/1ac7823f-8faf-474f-b14c-e4f7c7bb373f/?page=0', [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _ended: true, [2026-09-16 21:48:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: res: IncomingMessage { [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: { [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: undefined, [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function: handleStreamError], [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: [Function: handleStreamData], [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [ [Function: responseOnEnd], [Function: handleStreamEnd] ], [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: readable: undefined, [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function: handlerStreamAborted] [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 21:48:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 21:48:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 21:48:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin WebDAV [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:56] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:56] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:56] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin bilibili [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:48:59] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:48:59] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:48:59] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin Youtube [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:03] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:03] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:03] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin suno [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:06] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:06] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:06] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin udio [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:08] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:08] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:08] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 猫耳FM [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:10] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:10] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:10] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:11] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:11] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:11] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 快手 [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:13] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:13] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:13] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 音悦台 [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:17] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:17] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 闻音酷我 [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:19] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:19] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:19] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:49:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:49:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:49:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:49:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:49:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 21:49:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:49:20] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 21:49:20] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:49:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 21:49:27] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 21:49:27] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 21:49:39] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:49:39] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:49:39] [0.6.1] [ERROR] online_music.py:1327: 插件 酷我 搜索失败: Plugin 酷我 not found or not loaded [2026-09-16 21:49:39] [0.6.1] [ERROR] online_music.py:1327: 插件 酷狗_念心 搜索失败: Plugin 酷狗_念心 not found or not loaded [2026-09-16 21:49:39] [0.6.1] [ERROR] online_music.py:1327: 插件 网易音乐 搜索失败: Plugin 网易音乐 not found or not loaded [2026-09-16 21:49:39] [0.6.1] [ERROR] online_music.py:1327: 插件 网易云 搜索失败: Plugin 网易云 not found or not loaded [2026-09-16 21:49:39] [0.6.1] [ERROR] online_music.py:1327: 插件 汽水vip 搜索失败: Plugin 汽水vip not found or not loaded [2026-09-16 21:49:39] [0.6.1] [ERROR] online_music.py:1327: 插件 QQ Vip 搜索失败: Plugin QQ Vip not found or not loaded [2026-09-16 21:49:39] [0.6.1] [ERROR] online_music.py:1327: 插件 CCTV听音 搜索失败: Plugin CCTV听音 not found or not loaded [2026-09-16 21:49:44] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:49:44] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:49:44] [0.6.1] [ERROR] online_music.py:1401: 插件 酷我 搜索失败: Plugin 酷我 not found or not loaded [2026-09-16 21:49:50] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:49:50] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:49:50] [0.6.1] [ERROR] online_music.py:1401: 插件 QQ Vip 搜索失败: Plugin QQ Vip not found or not loaded [2026-09-16 21:50:00] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:50:00] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:50:00] [0.6.1] [ERROR] online_music.py:1401: 插件 QQ Vip 搜索失败: Plugin QQ Vip not found or not loaded [2026-09-16 21:50:08] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:50:08] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:50:08] [0.6.1] [ERROR] online_music.py:1327: 插件 酷我 搜索失败: Plugin 酷我 not found or not loaded [2026-09-16 21:50:08] [0.6.1] [ERROR] online_music.py:1327: 插件 酷狗_念心 搜索失败: Plugin 酷狗_念心 not found or not loaded [2026-09-16 21:50:08] [0.6.1] [ERROR] online_music.py:1327: 插件 网易音乐 搜索失败: Plugin 网易音乐 not found or not loaded [2026-09-16 21:50:08] [0.6.1] [ERROR] online_music.py:1327: 插件 网易云 搜索失败: Plugin 网易云 not found or not loaded [2026-09-16 21:50:08] [0.6.1] [ERROR] online_music.py:1327: 插件 汽水vip 搜索失败: Plugin 汽水vip not found or not loaded [2026-09-16 21:50:08] [0.6.1] [ERROR] online_music.py:1327: 插件 QQ Vip 搜索失败: Plugin QQ Vip not found or not loaded [2026-09-16 21:50:08] [0.6.1] [ERROR] online_music.py:1327: 插件 CCTV听音 搜索失败: Plugin CCTV听音 not found or not loaded [2026-09-16 21:50:11] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:50:11] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:50:11] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:50:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:50:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789566611861"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566611861: True [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789566612465"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566612465: True [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:50:12] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789566612768"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566612768: True [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789566613069"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566613069: True [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789566613673"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566613673: True [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:50:13] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:14] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789566613975"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:14] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:14] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566613975: True [2026-09-16 21:50:14] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 21:50:14] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'status': 'loaded', 'load_time': 1789566612.4653592, 'enabled': True}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'status': 'loaded', 'load_time': 1789566612.7676442, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789566613.0691795, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789566613.3711033, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789566613.6734722, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789566613.9748926, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789566614.276321, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:50:36] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin 哔哩哔哩 [2026-09-16 21:50:36] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:50:36] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:50:36] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:50:36] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:50:36] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:36] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789566636923"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566636923: True [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u54d4\u54e9\u54d4\u54e9", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const w_webid = await getWWebId(artistItem.id);\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n w_webid: w_webid,\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"\u54d4\u54e9\u54d4\u54e9\",\n appVersion: \">=0.0\",\n version: \"0.0.1\",\n author: \"sinmite\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/sinmite/source/raw/master/musicfree/bilibili.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789566637225"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 哔哩哔哩, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566637225: True [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 哔哩哔哩 [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789566637527"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566637527: True [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:50:37] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789566637829"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:37] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566637829: True [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789566638131"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566638131: True [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:50:38] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789566638734"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566638734: True [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789566639035"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566639035: True [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'status': 'loaded', 'load_time': 1789566637.225316, 'enabled': True}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'status': 'loaded', 'load_time': 1789566637.5270412, 'enabled': True}, '网易音乐': {'status': 'loaded', 'load_time': 1789566637.8288302, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789566638.1305802, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789566638.43253, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789566638.7337234, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789566639.0350175, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789566639.3363297, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789566639603"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566639603: True [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 21:50:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u54d4\u54e9\u54d4\u54e9", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const w_webid = await getWWebId(artistItem.id);\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n w_webid: w_webid,\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"\u54d4\u54e9\u54d4\u54e9\",\n appVersion: \">=0.0\",\n version: \"0.0.1\",\n author: \"sinmite\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/sinmite/source/raw/master/musicfree/bilibili.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789566639905"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 哔哩哔哩, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566639905: True [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 哔哩哔哩 [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789566640207"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566640207: True [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789566640508"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566640508: True [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:50:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789566640810"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566640810: True [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789566641413"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566641413: True [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:50:41] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:50:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789566641714"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:42] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566641714: True [2026-09-16 21:50:42] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 21:50:42] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'status': 'loaded', 'load_time': 1789566639.9048557, 'enabled': True}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'status': 'loaded', 'load_time': 1789566640.2065418, 'enabled': True}, '网易音乐': {'status': 'loaded', 'load_time': 1789566640.5082896, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789566640.8099296, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789566641.1117148, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789566641.4128475, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789566641.7143333, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789566642.0156052, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:50:47] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 21:50:47] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 21:50:47] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 哔哩哔哩 for keyword: 任素汐, type: music [2026-09-16 21:50:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 哔哩哔哩 [2026-09-16 21:50:47] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:50:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566647287"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566647287: True [2026-09-16 21:50:48] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin 哔哩哔哩, isEnd: False, found 20 results [2026-09-16 21:50:48] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 酷我 for keyword: 任素汐, type: music [2026-09-16 21:50:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 酷我 [2026-09-16 21:50:48] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:50:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u9177\u6211", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566648089"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566648089: True [2026-09-16 21:50:49] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin 酷我, isEnd: False, found 30 results [2026-09-16 21:50:49] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 酷狗_念心 for keyword: 任素汐, type: music [2026-09-16 21:50:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 酷狗_念心 [2026-09-16 21:50:49] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:50:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u9177\u72d7_\u5ff5\u5fc3", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566649792"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566649792: True [2026-09-16 21:50:51] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin 酷狗_念心, isEnd: False, found 20 results [2026-09-16 21:50:51] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 网易音乐 for keyword: 任素汐, type: music [2026-09-16 21:50:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 网易音乐 [2026-09-16 21:50:51] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:50:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u7f51\u6613\u97f3\u4e50", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566651694"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:53] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566651694: True [2026-09-16 21:50:53] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin 网易音乐, isEnd: False, found 20 results [2026-09-16 21:50:53] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 网易云 for keyword: 任素汐, type: music [2026-09-16 21:50:53] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 网易云 [2026-09-16 21:50:53] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:50:53] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u7f51\u6613\u4e91", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566653698"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:55] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566653698: True [2026-09-16 21:50:55] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin 网易云, isEnd: False, found 30 results [2026-09-16 21:50:55] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin 汽水vip for keyword: 任素汐, type: music [2026-09-16 21:50:55] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: 汽水vip [2026-09-16 21:50:55] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:50:55] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "\u6c7d\u6c34vip", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566655100"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:50:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 请求失败,第1次重试... Request failed with status code 404 [2026-09-16 21:51:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 请求失败,第2次重试... Request failed with status code 404 [2026-09-16 21:51:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 请求失败,第3次重试... Request failed with status code 404 [2026-09-16 21:51:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 搜索失败: Error: API请求失败(search): Request failed with status code 404 [2026-09-16 21:51:05] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566655100: True [2026-09-16 21:51:05] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin 汽水vip, isEnd: True, found 0 results [2026-09-16 21:51:05] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin QQ Vip for keyword: 任素汐, type: music [2026-09-16 21:51:05] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: QQ Vip [2026-09-16 21:51:05] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:51:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at evalmachine.:118:19 [2026-09-16 21:51:05] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "QQ Vip", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566665011"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 21:51:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async PluginRunner.search (/app/xiaomusic/js_plugin_runner.js:297:28) [2026-09-16 21:51:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async PluginRunner.handleMessage (/app/xiaomusic/js_plugin_runner.js:66:30) [2026-09-16 21:51:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 请求失败,第1次重试... Request failed with status code 404 [2026-09-16 21:51:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 请求失败,第2次重试... Request failed with status code 404 [2026-09-16 21:51:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 请求失败,第3次重试... Request failed with status code 404 [2026-09-16 21:51:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [PLUGIN] 搜索失败: Error: API请求失败(search.search_by_type): Request failed with status code 404 [2026-09-16 21:51:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566665011: True [2026-09-16 21:51:11] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin QQ Vip, isEnd: True, found 0 results [2026-09-16 21:51:11] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin CCTV听音 for keyword: 任素汐, type: music [2026-09-16 21:51:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: CCTV听音 [2026-09-16 21:51:11] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '任素汐', 'page': 1, 'limit': 2, 'type': 'music'} [2026-09-16 21:51:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "CCTV\u542c\u97f3", "params": {"keywords": "\u4efb\u7d20\u6c50", "page": 1, "limit": 2, "type": "music"}, "id": "msg_1789566671918"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at evalmachine.:279:19 [2026-09-16 21:51:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Plugin CCTV听音 does not have a search function, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 21:51:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async PluginRunner.search (/app/xiaomusic/js_plugin_runner.js:297:28) [2026-09-16 21:51:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566671918: True [2026-09-16 21:51:12] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin CCTV听音, isEnd: True, found 0 results [2026-09-16 21:51:12] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'}, {'id': 'BV1tvbf6sEaA', 'aid': 117126761285646, 'bvid': 'BV1tvbf6sEaA', 'artist': '青屿拾曲', 'title': '任素汐经典歌曲合集|15 首完整曲目沉浸式歌单', 'album': 'BV1tvbf6sEaA', 'artwork': 'http://i1.hdslb.com/bfs/archive/42a414d64c823b79b5e80444a4216066d52a2dc4.jpg', 'duration': 3483, 'tags': ['任素汐', '歌单', '歌曲合集', '经典歌曲', '经典', '合集', '歌曲'], 'date': '2026-08-20', 'platform': '哔哩哔哩'}, {'id': 'BV1DEEizDEdG', 'aid': 114505220624271, 'bvid': 'BV1DEEizDEdG', 'artist': 'JLRS-LeoFM', 'title': '任素汐《亲爱的你啊(《无尽的尽头》主题曲)》百万豪装录音棚大声听', 'alias': '亲爱的你啊(《无尽的尽头', 'album': 'BV1DEEizDEdG', 'artwork': 'http://i1.hdslb.com/bfs/archive/da29507e1a35183d879709c650c9e5f7227712ea.jpg', 'duration': 239, 'tags': ['任素汐', '录音棚', '电台新星征集令', '歌单', '电台', 'Hi-Fi', '电台新星征集令6.0', '音响', 'Hi-res'], 'date': '2025-05-14', 'platform': '哔哩哔哩'}, {'id': 'BV13gYD65Env', 'aid': 117254821777917, 'bvid': 'BV13gYD65Env', 'artist': '吉祥禅音', 'title': '任素汐经典歌曲合集,开口就是故事感,歌声直击内心', 'album': 'BV13gYD65Env', 'artwork': 'http://i2.hdslb.com/bfs/archive/8c674e2b37c4cb53ef0568d28403547b870daf56.jpg', 'duration': 2199, 'tags': ['全能音乐挑战赛', '周传雄', '音乐合集', '经典音乐', '歌曲合集', '经典歌曲', '经典', '怀旧', '治愈', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'}, {'id': 'BV1QbT36qEVv', 'aid': 116829234141255, 'bvid': 'BV1QbT36qEVv', 'artist': '可懒一个人哈哈哈', 'title': '任素汐2026演唱会首站(深圳)-4K全程(talking+短片全)', 'album': 'BV1QbT36qEVv', 'artwork': 'http://i2.hdslb.com/bfs/archive/9da614ff8ea7737714238906348cf37600334f3c.jpg', 'duration': 8122, 'tags': ['一日即日日', '演唱会', '亲爱的你啊', '王招君', '胡广生', '任素汐', '岁岁', '大梦', '我要你', '深圳'], 'date': '2026-06-29', 'platform': '哔哩哔哩'}, {'id': 'BV149Eq6iESJ', 'aid': 116731020315912, 'bvid': 'BV149Eq6iESJ', 'artist': '夕照影音', 'title': '任素汐《路还好远啊》上线了,自己作词作曲还亲唱,导演真会省钱', 'alias': '路还好远啊', 'album': 'BV149Eq6iESJ', 'artwork': 'http://i0.hdslb.com/bfs/archive/94ebe1ae4ab33a749ce4a838397ef9ede049810a.jpg', 'duration': 145, 'tags': ['MV', '原创', '路还好远啊', '音乐reaction大赏', '任素汐', '新歌'], 'date': '2026-06-11', 'platform': '哔哩哔哩'}, {'id': 'BV1AK41137HB', 'aid': 500457392, 'bvid': 'BV1AK41137HB', 'artist': '最久music', 'title': '任素汐一首《胡广生》,因唱哭了王菲而走红网络,初闻怎知曲中意', 'alias': '胡广生', 'album': 'BV1AK41137HB', 'artwork': 'http://i1.hdslb.com/bfs/archive/9759e53043e8a0ee05a307d1aea5e67bc281be89.jpg', 'duration': 190, 'tags': ['现实', '任素汐', '催泪', '好听', '打卡挑战', '深情', '走心', '感人', '胡广生', '电影剪辑'], 'date': '2020-12-03', 'platform': '哔哩哔哩'}, {'id': 'BV1qe1CYBEvT', 'aid': 113263723418680, 'bvid': 'BV1qe1CYBEvT', 'artist': '账号已注销', 'title': '任素汐年轻长得还行啊', 'album': 'BV1qe1CYBEvT', 'artwork': 'http://i0.hdslb.com/bfs/archive/ce8f7f49ab8ae04da4e5b59dd131bf46dae5f2c5.jpg', 'duration': 127, 'tags': ['电影剪辑', '经典电影', '影视剪辑'], 'date': '2024-10-07', 'platform': '哔哩哔哩'}, {'id': 'BV1qNTj68EvD', 'aid': 116849836754646, 'bvid': 'BV1qNTj68EvD', 'artist': '乐听乐说', 'title': '在百万豪装录音棚听【任素汐】深圳演唱会全套合集,【Hi-Res无损音质】,可后台播放,沉浸式放松听歌,开车跑步通勤歌单', 'album': 'BV1qNTj68EvD', 'artwork': 'http://i0.hdslb.com/bfs/archive/86356409ca065d25c5a07d220a00cea15cbd4c02.jpg', 'duration': 8297, 'tags': ['全能音乐挑战赛', '歌单', '专辑', '演唱会', '沉浸式听歌', '任素汐', '录音棚', '华语经典', '流行歌曲', '无损音质'], 'date': '2026-07-02', 'platform': '哔哩哔哩'}, {'id': 'BV13a4y1D789', 'aid': 663428497, 'bvid': 'BV13a4y1D789', 'artist': '无损音乐合集', 'title': '【任素汐歌曲合集】你看花儿多红啊', 'album': 'BV13a4y1D789', 'artwork': 'http://i1.hdslb.com/bfs/archive/4b845a635116f4880bcb78be1fcc462c9857c212.png', 'duration': 3828, 'tags': ['歌曲合集', '无损音质', '分集播放', '听歌', '歌单', '合集', '高质量', '任素汐', '歌曲', '好听'], 'date': '2023-11-15', 'platform': '哔哩哔哩'}, {'id': 'BV19K8p6aEtZ', 'aid': 117122718043013, 'bvid': 'BV19K8p6aEtZ', 'artist': 'Galvvvvvvvin', 'title': '【4K全程】任素汐|260815一日即日日Live成都演唱会收官全记录|小歌儿们下次再见', 'album': 'BV19K8p6aEtZ', 'artwork': 'http://i0.hdslb.com/bfs/archive/3b1654732a48086761f33d5750b48624ab63fa24.jpg', 'duration': 7606, 'tags': ['一日即日日Live', '音乐4K计划', '任素汐', '音乐现场', '4K', 'LIVE', '演唱会', '成都演唱会', '全程'], 'date': '2026-08-19', 'platform': '哔哩哔哩'}, {'id': 'BV1Yw411A7Rh', 'aid': 277044963, 'bvid': 'BV1Yw411A7Rh', 'artist': '向日葵99音乐', 'title': '实力派新生代演员~【任素汐】~经典歌曲合集~值得收藏~单曲循环~无损音质', 'album': 'BV1Yw411A7Rh', 'artwork': 'http://i1.hdslb.com/bfs/archive/2627d8174f882ee3da4b412448ae5f1ff964015b.png', 'duration': 2680, 'tags': ['我推的流行音乐', '音乐推荐', '流行音乐', '单曲循环', '听歌向', '音乐', '日推歌单', '音乐综合', '任素汐', '成名曲', '无损音质'], 'date': '2023-10-10', 'platform': '哔哩哔哩'}, {'id': 'BV1fqR7BpEoh', 'aid': 116504746069107, 'bvid': 'BV1fqR7BpEoh', 'artist': '畅听音乐', 'title': '【任素汐】最好听的10首歌曲,无损音质、同步歌词、点击评论区置顶时间能快速切歌哦', 'album': 'BV1fqR7BpEoh', 'artwork': 'http://i2.hdslb.com/bfs/archive/74abbaf2616039e4848c5cf5bf46d20159097081.jpg', 'duration': 2199, 'tags': ['经典老歌', '给场景配上BGM', '任素汐热歌', 'HiRes', '怀旧老歌', '任素汐', '歌曲盘点', '热门歌曲', '高音质', '无损音质'], 'date': '2026-05-02', 'platform': '哔哩哔哩'}, {'id': 'BV1DAitBDEzX', 'aid': 115841945305712, 'bvid': 'BV1DAitBDEzX', 'artist': '音乐罐头厂', 'title': '【任素汐精选合集】来听听影后的灵魂独白,收藏级!', 'album': 'BV1DAitBDEzX', 'artwork': 'http://i1.hdslb.com/bfs/archive/fb4d3a26a1a460490b328e764bc3cd5d058e6477.jpg', 'duration': 2007, 'tags': ['音乐合集', '好听', '宫格音乐', '宝藏音乐', '电台新星征集令', '日推歌单', '精选歌单', '任素汐', '热歌'], 'date': '2026-01-05', 'platform': '哔哩哔哩'}, {'id': 'BV1HV411r7NU', 'aid': 413418126, 'bvid': 'BV1HV411r7NU', 'artist': '未来Y已来', 'title': '喜欢任素汐,飙车!', 'album': 'BV1HV411r7NU', 'artwork': 'http://i1.hdslb.com/bfs/archive/0e28bd90f083ba708048ee0d2ecc73dd799622ad.png', 'duration': 133, 'tags': ['小视频'], 'date': '2020-06-01', 'platform': '哔哩哔哩'}, {'id': 'BV1JUU6Y3Eib', 'aid': 113497346414245, 'bvid': 'BV1JUU6Y3Eib', 'artist': '知己音乐', 'title': '莫怕莫怕 - 任素汐【Hi-Res无损音质】', 'album': 'BV1JUU6Y3Eib', 'artwork': 'http://i2.hdslb.com/bfs/archive/018f53fb247cfd3ca5c88b8078f83ebc0b4fc677.jpg', 'duration': 284, 'tags': ['音乐玩家招募令第六期', '音乐分享官', '无损音质', '任素汐', '经典', '歌词版'], 'date': '2024-11-18', 'platform': '哔哩哔哩'}, {'id': 'BV1PTbS6XEHk', 'aid': 117102836981688, 'bvid': 'BV1PTbS6XEHk', 'artist': 'mayoyo2020', 'title': '【任素汐】好听程度夯中夯!2026.08.15 任素汐·[小歌儿们的live]·成都场全纪录·横版直拍·有字幕版', 'album': 'BV1PTbS6XEHk', 'artwork': 'http://i0.hdslb.com/bfs/archive/dbbbe60adf3a8c31c1ab9216a72edd19384286bb.jpg', 'duration': 7796, 'tags': ['4K', '字幕版', '成都', '亲爱的你啊', '一起来看live', '珍珠珍珠', '横版直拍', '胡广生', '任素汐', '我要你'], 'date': '2026-08-16', 'platform': '哔哩哔哩'}, {'id': 'BV1eCMz6REyQ', 'aid': 117039637205351, 'bvid': 'BV1eCMz6REyQ', 'artist': '吉祥禅音', 'title': '【任素汐】精选任素汐10首热门好听的歌曲,有歌词《亲爱的你啊》《我要你》《胡广生》《王招君》《枕着光的她》《有一点动心》《岁岁》《好》《北方》《莫怕莫怕》', 'alias': '亲爱的你啊', 'album': 'BV1eCMz6REyQ', 'artwork': 'http://i0.hdslb.com/bfs/archive/5c20d4352df65baa85689cc4b8e304499f587707.jpg', 'duration': 2199, 'tags': ['全能音乐挑战赛', '音乐合集', '周传雄', '经典音乐', '歌曲合集', '经典歌曲', '经典', '怀旧', '治愈', '歌曲'], 'date': '2026-08-05', 'platform': '哔哩哔哩'}, {'id': 'BV1dwu6z1EPU', 'aid': 114851837905044, 'bvid': 'BV1dwu6z1EPU', 'artist': '一枚男米', 'title': '被汪苏泷介绍周深和任素汐认识笑死!深深模仿任姐唱歌是有点像的!你俩加个微信吧太尴尬了!夸任姐的歌声很好听', 'album': 'BV1dwu6z1EPU', 'artwork': 'http://i1.hdslb.com/bfs/archive/4ecf49958b0dd46d80002bd60532b282ad4054b7.jpg', 'duration': 113, 'tags': ['汪苏泷', '任素汐', '周深'], 'date': '2025-07-14', 'platform': '哔哩哔哩'}, {'id': 'BV14VsgzDExf', 'aid': 115403791538840, 'bvid': 'BV14VsgzDExf', 'artist': '音乐的独奏曲', 'title': '【Hi-Res无损音乐】任素汐歌曲音乐合集', 'album': 'BV14VsgzDExf', 'artwork': 'http://i1.hdslb.com/bfs/archive/081f281082f42de2ef63dc0f3c94289008bc531a.jpg', 'duration': 5453, 'tags': ['Hi-Res', '无损音乐', '无损音质', '歌曲', '任素汐', 'hifi音乐', '音乐', '中国音乐', '民谣'], 'date': '2025-10-20', 'platform': '哔哩哔哩'}, {'id': '469554746', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s7/3/2259378879.jpg', 'title': '亲爱的你啊', 'artist': '任素汐', 'album': '亲爱的你啊', 'albumId': '67910855', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '56730235', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s64/47/346766078.jpg', 'title': '胡广生', 'artist': '任素汐', 'album': '胡广生', 'albumId': '7470445', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '572298331', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s5/92/2053650316.jpg', 'title': '别来无恙', 'artist': '任素汐', 'album': '浮尘几章', 'albumId': '92983120', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '173910026', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s8/18/507684204.jpg', 'title': '王招君 (你看你拉住我的模样)', 'artist': '任素汐', 'album': 'TA·说', 'albumId': '47109498', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '340742831', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s9/14/1722080867.jpg', 'title': '枕着光的她', 'artist': '任素汐', 'album': '枕着光的她', 'albumId': '47293793', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '314109306', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s7/30/3594947230.jpg', 'title': '岁岁', 'artist': '任素汐', 'album': '故乡,别来无恙 电视剧原声带', 'albumId': '44003428', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '572298486', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s5/92/2053650316.jpg', 'title': '张仙语三', 'artist': '任素汐', 'album': '浮尘几章', 'albumId': '92983120', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '572298484', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s5/92/2053650316.jpg', 'title': '本末', 'artist': '任素汐', 'album': '浮尘几章', 'albumId': '92983120', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '303583666', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s27/82/2527255846.jpg', 'title': '大梦', 'artist': '瓦依那&任素汐', 'album': '乐队的夏天3 第7期', 'albumId': '42146507', 'artistId': '210282', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '408259014', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s25/78/867892348.jpg', 'title': '莫怕莫怕', 'artist': '任素汐', 'album': '祝你幸福! 电影原声带', 'albumId': '58829676', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '9919225', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/77/52/3250772900.jpg', 'title': '我要你', 'artist': '任素汐', 'album': '我要你', 'albumId': '1357803', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '480328866', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s81/82/66218031.jpg', 'title': '好', 'artist': '任素汐', 'album': '好', 'albumId': '70960184', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '541724201', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s79/7/1920450682.jpg', 'title': '歌曲:别来无恙', 'artist': '任素汐&毛不易', 'album': '2026中央广播电视总台春节联欢晚会', 'albumId': '85677838', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '56501314', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s15/5/3696183624.jpg', 'title': '等一等', 'artist': '任素汐', 'album': '等一等', 'albumId': '7433984', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '168540310', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/94/70/1925433877.jpg', 'title': '有一点动心', 'artist': '张信哲&任素汐', 'album': '就懂了', 'albumId': '18749120', 'artistId': '1493', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '473511173', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s42/36/842779355.jpg', 'title': '亲爱的你啊', 'artist': '任素汐&任宥纶', 'album': '亲爱的你啊', 'albumId': '68962887', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '216443071', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s81/8/2213948585.jpg', 'title': '亲爱的小孩', 'artist': '任素汐', 'album': '亲爱的小孩 电视剧原声带', 'albumId': '27753756', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '554160626', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s60/96/3105757905.jpg', 'title': '草木不言,雾露为衣', 'artist': '任素汐', 'album': '月鳞绮纪 影视原声带', 'albumId': '88793023', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '54343899', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/24/72/3559388734.jpg', 'title': '再见青春', 'artist': '任素汐', 'album': '再见青春', 'albumId': '7134956', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '318037127', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s7/30/3594947230.jpg', 'title': '大儿歌', 'artist': '任素汐&张弛', 'album': '故乡,别来无恙 电视剧原声带', 'albumId': '44003428', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '586376325', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s5/92/2053650316.jpg', 'title': '夜灯', 'artist': '任素汐', 'album': '浮尘几章', 'albumId': '92983120', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '28444504', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/88/9/600687991.jpg', 'title': '我要你', 'artist': '老狼&任素汐', 'album': '我要你', 'albumId': '3986271', 'artistId': '1256', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '472544005', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s58/20/2047712711.jpg', 'title': '亲爱的你啊', 'artist': '任素汐&马可艾', 'album': '无尽的尽头 电视剧歌曲原声带', 'albumId': '68701673', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '339785500', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s8/18/507684204.jpg', 'title': '胡广生 (我欠你啥子嘛)', 'artist': '任素汐', 'album': 'TA·说', 'albumId': '47109498', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '546365225', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s91/39/3906398869.jpg', 'title': '风 (一切都像风)', 'artist': '任素汐', 'album': '风 (一切都像风)', 'albumId': '86876765', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '340780449', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s3s26/6/3518008113.png', 'title': '歌曲:枕着光的她', 'artist': '任素汐', 'album': '2024年中央广播电视总台春节联欢晚会', 'albumId': '46983299', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '473357517', 'title': '亲爱的你啊', 'artist': '任素汐', 'album': '', 'albumId': '0', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '321265635', 'title': '儿时', 'artist': '任素汐&杨恩又', 'album': '', 'albumId': '0', 'artistId': '0', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': '401262323', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s48/54/1727155737.jpg', 'title': '愿人生', 'artist': '任素汐', 'album': '愿人生 (电影《逆行人生》推广主题曲)', 'albumId': '56878417', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': False, 'platform': '酷我'}, {'id': '534589473', 'artwork': 'https://img4.kuwo.cn/star/albumcover/256/s4s89/13/3334323161.jpg', 'title': '胡广生', 'artist': '任素汐', 'album': '胡广生 (live版)', 'albumId': '83910831', 'artistId': '493402', 'formats': 'aac|mp3|flac', 'isfree': True, 'platform': '酷我'}, {'id': 'C42C2C5C7A68CDAFBF543F29AF883B1D', 'title': '亲爱的你啊', 'artist': '任素汐', 'album': '亲爱的你啊', 'album_id': '144348541', 'album_audio_id': 0, 'duration': 235, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20250422/20250422153301762300.jpg', '320hash': '24711441B905FF5D681D7C5EC15F6D03', 'sqhash': 'F6C6658C10EFF40BE28D97745552E605', 'ResFileHash': '8E5390E4B35534B15B0E972B845A5A0B', 'platform': '酷狗_念心'}, {'id': '8C655F575EBB2414B53EFF0D2C13188D', 'title': '胡广生', 'artist': '任素汐', 'album': '胡广生', 'album_id': '12506106', 'album_audio_id': 0, 'duration': 214, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20250217/20250217145219198680.jpg', '320hash': 'B4B4F8657487B87B687D996383198BAA', 'sqhash': '8F451478DE226DFF22F5D0BB76DAF690', 'ResFileHash': '', 'platform': '酷狗_念心'}, {'id': 'A6971AC00970DB979D3D7F6089B054B4', 'title': '枕着光的她', 'artist': '任素汐', 'album': '枕着光的她', 'album_id': '83300880', 'album_audio_id': 0, 'duration': 190, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20240702/20240702162342740878.jpg', '320hash': 'F678CB7801049409C22DFA8E12871325', 'sqhash': '96EFE45FC949C037071CD33A7709FDF8', 'ResFileHash': '55C87EF43444A0DDAFFBB75CEA1FBCB8', 'platform': '酷狗_念心'}, {'id': 'B333830FB72C014041863CAC5DB0A637', 'title': '王招君', 'artist': '任素汐', 'album': 'TA·说', 'album_id': '83070145', 'album_audio_id': 0, 'duration': 255, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20240204/20240204175601843475.jpg', '320hash': '69A8109120AB2CB0335D257E67C23C5E', 'sqhash': 'BD3A3DC3AB3AE985296E18D4173D89D7', 'ResFileHash': '9EB90DB4750A3BF9E6C37103839B0D88', 'platform': '酷狗_念心'}, {'id': '74490CBF29323178A0363CF3E2705B34', 'title': '岁岁', 'artist': '任素汐', 'album': '故乡,别来无恙 电视剧原声带', 'album_id': '80582138', 'album_audio_id': 0, 'duration': 216, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20231121/20231121173303433655.jpg', '320hash': 'CF1937E361EB4DCAC5459712977CB5E9', 'sqhash': '85893E7A24F542E981CCDDE088B6B0C4', 'ResFileHash': 'BB08AE5EB5729A94FA656B3B991305D3', 'platform': '酷狗_念心'}, {'id': 'FFE58578805E1F5785CEE59635E01B85', 'title': '好', 'artist': '任素汐', 'album': '好', 'album_id': '151678959', 'album_audio_id': 0, 'duration': 207, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20250624/20250624173312211452.jpg', '320hash': 'A63AE8D6B40E56B57DCC8C67FB31E289', 'sqhash': '84464C9C2BF00B0D87F93B6739DEC689', 'ResFileHash': 'AEC11A902D882FA52F521FAF4E318FCB', 'platform': '酷狗_念心'}, {'id': '2591284F609E7EE9FEAF172570C88FBF', 'title': '本末', 'artist': '任素汐', 'album': '浮尘几章', 'album_id': '191975390', 'album_audio_id': 0, 'duration': 202, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20260521/20260521150522785934.jpg', '320hash': 'F1EA3592BD7C67751A1B9A2DE2608E4D', 'sqhash': '9760B804970BDD712B9D664B1A8EC6B6', 'ResFileHash': 'BA37A7F4B5D0145C6F9E5D018720A731', 'platform': '酷狗_念心'}, {'id': 'B2D122170A7DCDD3308CC13DAB23CFE3', 'title': '张仙语三', 'artist': '任素汐', 'album': '浮尘几章', 'album_id': '191975390', 'album_audio_id': 0, 'duration': 222, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20260521/20260521150522785934.jpg', '320hash': '7C56D27DC8B6DA3937A3920A6D68CC1A', 'sqhash': '143E6C05B6BC3FD01F82162581E054A6', 'ResFileHash': 'A0FEF14CC7F047D2F5575835519F788C', 'platform': '酷狗_念心'}, {'id': 'EF73606C64A5F68784A8405C6A2978BF', 'title': '我要你', 'artist': '任素汐', 'album': '我要你', 'album_id': '1802697', 'album_audio_id': 0, 'duration': 154, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20200909/20200909132801220934.jpg', '320hash': '2D07916B94A63695EFFB52C2C8BED4DB', 'sqhash': '575C54CF8E904E65442D350E4A34AD69', 'ResFileHash': '069421F8B1549ED8BF83B5D9F50C129D', 'platform': '酷狗_念心'}, {'id': '5AE39CC0A3B6D3297E83C2A005F0235E', 'title': '大梦 (Live)', 'artist': '瓦依那、任素汐', 'album': '乐队的夏天3 第7期', 'album_id': '78564222', 'album_audio_id': 0, 'duration': 475, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20230922/20230922093702456337.jpg', '320hash': 'F2320D181999B2F731B9AD444489D43C', 'sqhash': 'C81A694AB278438F6B40240F2A6A69BE', 'ResFileHash': '439EA893C0E231FAE764B382E2FF2A71', 'platform': '酷狗_念心'}, {'id': 'B0AED37A33A92510BBA741F60B4DE518', 'title': '别来无恙', 'artist': '任素汐', 'album': '浮尘几章', 'album_id': '191975390', 'album_audio_id': 0, 'duration': 253, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20260521/20260521150522785934.jpg', '320hash': '1A79846A6CAE0C9A3F3DEF330236A4F3', 'sqhash': '011F18A2E6F8BD099789DDD41C07E54F', 'ResFileHash': '0A99D571FE4E3D62C61858B5661C4BFB', 'platform': '酷狗_念心'}, {'id': '98D195CBFF25736F9DB979AC8FD34265', 'title': '莫怕莫怕', 'artist': '任素汐', 'album': '祝你幸福! 电影原声带', 'album_id': '104336504', 'album_audio_id': 0, 'duration': 283, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20250328/20250328182922626916.jpg', '320hash': '0106F54230D45850C8643E78980BED78', 'sqhash': '1074D0A25C68331F52C2DE9367FCDC07', 'ResFileHash': 'D7121896EC2BFE0352EB8CBC63695414', 'platform': '酷狗_念心'}, {'id': 'F43DE58E3B1020232D49E6456E83B6C2', 'title': '再见青春', 'artist': '任素汐', 'album': '再见青春', 'album_id': '10222641', 'album_audio_id': 0, 'duration': 281, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20180912/20180912115105598436.jpg', '320hash': '285B8714CC143BDD4CF4E17975AA5538', 'sqhash': '2DCD57A7AC48B4B7B433224364CBE030', 'ResFileHash': '1A01F5CABCAEDB8188B38751FFEAA73D', 'platform': '酷狗_念心'}, {'id': '290291B3AF3574AFBE8C4F1568DFDA4B', 'title': '亲爱的小孩', 'artist': '任素汐', 'album': '亲爱的小孩 电视剧原声带', 'album_id': '56703825', 'album_audio_id': 0, 'duration': 244, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20231114/20231114152801267402.jpg', '320hash': 'E0BF7A11F892821FE4C6818CE4D27B25', 'sqhash': '3AE867B0FE19636F35471B485AD2525D', 'ResFileHash': '', 'platform': '酷狗_念心'}, {'id': '6CFA15B131E2A4AADA8A34B2B6ED06D3', 'title': '等一等', 'artist': '任素汐', 'album': '等一等', 'album_id': '12249788', 'album_audio_id': 0, 'duration': 266, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20250217/20250217144432188143.jpg', '320hash': '7228123D71942DEEA8EA8FED4E2EAE9F', 'sqhash': 'D6598ED0F557420FBBD53A2807B689C4', 'ResFileHash': '', 'platform': '酷狗_念心'}, {'id': '499112AD200F2CD83E259330FF7AF41F', 'title': '愿人生 (电影(逆行人生)推广主题曲)', 'artist': '任素汐', 'album': '愿人生 (电影《逆行人生》推广主题曲)', 'album_id': '101040593', 'album_audio_id': 0, 'duration': 205, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20260224/20260224085012720629.jpg', '320hash': '24A79F234CB7A93BC9B82B63F6B795EF', 'sqhash': '6C5D5709A0D9E302443CBCDF36870185', 'ResFileHash': '8D4FDEA6A274D0924EAA2D8DEAF65ECB', 'platform': '酷狗_念心'}, {'id': '6933CA408BC9EB883BFE8D30A7D47BF4', 'title': '歌曲:别来无恙', 'artist': '任素汐、毛不易', 'album': '2026中央广播电视总台春节联欢晚会', 'album_id': '176719581', 'album_audio_id': 0, 'duration': 201, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20260216/20260216143010430795.jpg', '320hash': '254C53FF6F7AAD60FFB9C40A44DFBE1E', 'sqhash': '052CDDB30CB41C88F446156E9E2CCF41', 'ResFileHash': '097E9C347442320A8533E6AD543A2689', 'platform': '酷狗_念心'}, {'id': '3446BCF861FFAE633120E24E3DC61657', 'title': '风', 'artist': '任素汐', 'album': '风 (一切都像风)', 'album_id': '178224276', 'album_audio_id': 0, 'duration': 237, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20260311/20260311132151591538.jpg', '320hash': 'D199BC6FCA19CE178376C3A8A80913B6', 'sqhash': 'E9791EEE824FB6AC07F0CF68B8F0C32A', 'ResFileHash': 'A1E51876899232EE063D31A1AEA86F85', 'platform': '酷狗_念心'}, {'id': 'AD4B35C8D51FBF6740CA01BEE830D6A4', 'title': '草木不言,雾露为衣', 'artist': '任素汐', 'album': '月鳞绮纪 影视原声带', 'album_id': '181516072', 'album_audio_id': 0, 'duration': 353, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20260330/20260330212820411927.jpg', '320hash': '29E22DFE4EB36D07D9A96E14BC85013F', 'sqhash': 'BC0EA73BADF6D138F055B500DC81BE66', 'ResFileHash': 'B5C342BB01ABC8C9EB880D40F3962092', 'platform': '酷狗_念心'}, {'id': '66D65859B77D19A2BC0FFB174AF1D83E', 'title': '胡广生', 'artist': '任素汐', 'album': 'TA·说', 'album_id': '83070145', 'album_audio_id': 0, 'duration': 223, 'artwork': 'http://imge.kugou.com/stdmusic/1080/20240204/20240204175601843475.jpg', '320hash': '267BE7F2CE4E1AFD949FA26B614EC4E3', 'sqhash': '724BCC3FC43A458E4BB093410CD92D0A', 'ResFileHash': 'D2F5EEC2E550D754A9F995FC374393D5', 'platform': '酷狗_念心'}, {'type': '1', 'id': '2697656415', 'artist': '任素汐', 'title': '亲爱的你啊', 'duration': 235750, 'album': '亲爱的你啊', 'artwork': 'http://p3.music.126.net/s0D6UTU1YUtMcOCtwKHaRA==/109951170776174055.jpg', 'qualities': {'low': {'size': 3772845}, 'standard': {'size': 9432045}, 'high': {'size': 21810722}, 'super': {'size': 44409999}}, 'albumId': 269773919, 'artistId': '1054159', 'vid': 22742924, 'platform': '网易音乐'}, {'type': '1', 'id': '1325905146', 'artist': '任素汐', 'title': '胡广生', 'duration': 214984, 'album': '胡广生', 'artwork': 'http://p4.music.126.net/fG0T1hnM9EEmkYSo4Ey97A==/109951163669946483.jpg', 'qualities': {'low': {'size': 3440684}, 'standard': {'size': 8601644}, 'high': {'size': 19792143}}, 'albumId': 74416913, 'artistId': '1054159', 'vid': 10834280, 'platform': '网易音乐'}, {'type': '1', 'id': '1838919030', 'artist': '任素汐', 'title': '王招君', 'duration': 255146, 'album': 'TA·说', 'artwork': 'http://p3.music.126.net/d_AC9BDLrl98XyLDWrfbWg==/109951169311058334.jpg', 'qualities': {'low': {'size': 4083501}, 'standard': {'size': 10208685}, 'high': {'size': 22613043}, 'super': {'size': 46877132}}, 'albumId': 185077517, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '2098161478', 'artist': '任素汐', 'title': '岁岁', 'duration': 216809, 'album': '岁岁', 'artwork': 'http://p4.music.126.net/mENgg96xEvup6x4cQaaHXw==/109951169042801848.jpg', 'qualities': {'low': {'size': 3469869}, 'standard': {'size': 8674605}, 'high': {'size': 23382940}, 'super': {'size': 23936149}}, 'albumId': 178685596, 'artistId': '1054159', 'vid': 14676432, 'platform': '网易音乐'}, {'type': '1', 'id': '3384359974', 'artist': '任素汐', 'title': '别来无恙', 'duration': 253408, 'album': '浮尘几章', 'artwork': 'http://p4.music.126.net/VYN0yH6iq_UDoDHVnWjfgQ==/109951173253807316.jpg', 'qualities': {'low': {'size': 4055469}, 'standard': {'size': 10138605}, 'high': {'size': 24674378}, 'super': {'size': 48885946}}, 'albumId': 377491598, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '3384359415', 'artist': '任素汐', 'title': '张仙语三', 'duration': 222229, 'album': '浮尘几章', 'artwork': 'http://p3.music.126.net/VYN0yH6iq_UDoDHVnWjfgQ==/109951173253807316.jpg', 'qualities': {'low': {'size': 3556653}, 'standard': {'size': 8891565}, 'high': {'size': 23457025}, 'super': {'size': 44711586}}, 'albumId': 377491598, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '2620872938', 'artist': '任素汐', 'title': '莫怕莫怕', 'duration': 283273, 'album': '电影《祝你幸福!》原声带', 'artwork': 'http://p3.music.126.net/1lFg2Mu9O4sZsRje5nWlkQ==/109951169905240522.jpg', 'qualities': {'low': {'size': 4533549}, 'standard': {'size': 11333805}, 'high': {'size': 33066392}, 'super': {'size': 60308040}}, 'albumId': 246036631, 'artistId': '1054159', 'vid': 22611407, 'platform': '网易音乐'}, {'type': '1', 'id': '2124660416', 'artist': '任素汐', 'title': '我要你', 'duration': 154230, 'album': '我要你', 'artwork': 'http://p4.music.126.net/IhXGZO5pmr_PZdZ4BT4Q0w==/109951169318264733.jpg', 'qualities': {'low': {'size': 2468781}, 'standard': {'size': 6171885}, 'high': {'size': 15024980}}, 'albumId': 185323621, 'artistId': '1054159', 'vid': 5382141, 'platform': '网易音乐'}, {'type': '1', 'id': '3384359414', 'artist': '任素汐', 'title': '本末', 'duration': 202048, 'album': '浮尘几章', 'artwork': 'http://p3.music.126.net/VYN0yH6iq_UDoDHVnWjfgQ==/109951173253807316.jpg', 'qualities': {'low': {'size': 3233709}, 'standard': {'size': 8084205}, 'high': {'size': 25274402}, 'super': {'size': 44698294}}, 'albumId': 377491598, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '1323509945', 'artist': '任素汐', 'title': '等一等', 'duration': 266000, 'album': '等一等', 'artwork': 'http://p3.music.126.net/3NvnZhGOvfF3zjClv7WdKQ==/109951163655884540.jpg', 'qualities': {'low': {'size': 4256958}, 'standard': {'size': 10642329}, 'high': {'size': 29762993}}, 'albumId': 74283886, 'artistId': '1054159', 'vid': 10833077, 'platform': '网易音乐'}, {'type': '1', 'id': '3354884940', 'artist': '任素汐', 'title': '风 (一切都像风)', 'duration': 237508, 'album': '风 (一切都像风)', 'artwork': 'http://p4.music.126.net/IHHaB6X00VqFW7z35NzWBg==/109951172827084732.jpg', 'qualities': {'low': {'size': 3801261}, 'standard': {'size': 9503085}, 'high': {'size': 26108252}, 'super': {'size': 48887471}}, 'albumId': 364284870, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '2727730341', 'artist': '任素汐', 'title': '好', 'duration': 207291, 'album': '好', 'artwork': 'http://p3.music.126.net/2oQtYqkGFmujxT5Gdl4Sqw==/109951171490657723.jpg', 'qualities': {'low': {'size': 3317805}, 'standard': {'size': 8294445}, 'high': {'size': 21020227}, 'super': {'size': 40846279}}, 'albumId': 278921715, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '2083989384', 'artist': '瓦依那&任素汐', 'title': '大梦 (Live)', 'duration': 475367, 'album': '乐队的夏天3 第7期', 'artwork': 'http://p3.music.126.net/mOL-NOBmbf2OItVscMbHoQ==/109951168932744769.jpg', 'qualities': {'low': {'size': 7606701}, 'standard': {'size': 19016685}, 'high': {'size': 45042932}, 'super': {'size': 90509404}}, 'albumId': 175240283, 'artistId': '1026119&1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '1939461533', 'artist': '任素汐', 'title': '亲爱的小孩', 'duration': 244532, 'album': '亲爱的小孩 电视剧原声带', 'artwork': 'http://p4.music.126.net/u8yHqJhaCmtDXt7k6K03yQ==/109951167312698545.jpg', 'qualities': {'low': {'size': 3912977}, 'standard': {'size': 9782378}, 'high': {'size': 26640046}}, 'albumId': 143676695, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '2704972895', 'artist': '任素汐&任宥纶', 'title': '亲爱的你啊', 'duration': 235750, 'album': '亲爱的你啊', 'artwork': 'http://p3.music.126.net/8Fy-LeczfF-Vh_zslLtYYg==/109951170983868080.jpg', 'qualities': {'low': {'size': 3772845}, 'standard': {'size': 9432045}, 'high': {'size': 21618680}, 'super': {'size': 44227194}}, 'albumId': 272015403, 'artistId': '1054159&33252236', 'platform': '网易音乐'}, {'type': '1', 'id': '2614502546', 'artist': '任素汐', 'title': '愿人生', 'duration': 205250, 'album': '愿人生', 'artwork': 'http://p3.music.126.net/iMWAevMufytqxjXq7Omy3g==/109951169846621726.jpg', 'qualities': {'low': {'size': 3285165}, 'standard': {'size': 8212845}, 'high': {'size': 22530870}, 'super': {'size': 42231165}}, 'albumId': 244142984, 'artistId': '1054159', 'vid': 22608109, 'platform': '网易音乐'}, {'type': '1', 'id': '2103689933', 'artist': '任素汐&张弛', 'title': '大儿歌', 'duration': 184632, 'album': '大儿歌', 'artwork': 'http://p3.music.126.net/5qaQJZhKxKTarmf37SSXnQ==/109951169102132144.jpg', 'qualities': {'low': {'size': 2954925}, 'standard': {'size': 7387245}, 'high': {'size': 18626274}, 'super': {'size': 36381944}}, 'albumId': 179957446, 'artistId': '1054159&34600851', 'platform': '网易音乐'}, {'type': '1', 'id': '3322756981', 'artist': '任素汐', 'title': '困', 'duration': 278594, 'album': '困', 'artwork': 'http://p3.music.126.net/ry8eXkEqN17GvzDXde4irQ==/109951172355465056.jpg', 'qualities': {'low': {'size': 4458669}, 'standard': {'size': 11146605}, 'high': {'size': 32498782}, 'super': {'size': 32943013}}, 'albumId': 352311251, 'artistId': '1054159', 'platform': '网易音乐'}, {'type': '1', 'id': '2688492458', 'artist': '任素汐', 'title': '别松手啊 我最好的傻瓜', 'duration': 277941, 'album': '别松手啊 我最好的傻瓜', 'artwork': 'http://p4.music.126.net/U0p8nUCPHq18Xo2eAbyqvA==/109951170650390802.jpg', 'qualities': {'low': {'size': 4447917}, 'standard': {'size': 11119725}, 'high': {'size': 28538999}, 'super': {'size': 55168285}}, 'albumId': 267086956, 'artistId': '1054159', 'vid': 22720596, 'platform': '网易音乐'}, {'type': '1', 'id': '2687807196', 'artist': '任素汐', 'title': '荒原', 'duration': 197656, 'album': '荒原', 'artwork': 'http://p4.music.126.net/IsDbAbHedl-N2Y-gScOWMA==/109951170644126870.jpg', 'qualities': {'low': {'size': 3163437}, 'standard': {'size': 7908525}, 'high': {'size': 22476700}}, 'albumId': 266843467, 'artistId': '1054159', 'vid': 34767018, 'platform': '网易音乐'}, {'id': 3349307971, 'title': '79', 'artist': '后台知名度\u206d\u206d\u206d', 'album': 'uu', 'url': 'https://share.duanx.cn/url/wy/3349307971/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 1398474917, 'title': '79', 'artist': 'STEPHY MARTIN', 'album': 'Initial Eurobeat 3', 'url': 'https://share.duanx.cn/url/wy/1398474917/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 1416074, 'platform': '网易云'}, {'id': 1344806406, 'title': '你爱我吗', 'artist': '79', 'album': 'sevenine', 'url': 'https://share.duanx.cn/url/wy/1344806406/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2145385062, 'title': '杏仁痞子豆腐心', 'artist': '苏照钦', 'album': '797', 'url': 'https://share.duanx.cn/url/wy/2145385062/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 1840443983, 'title': '79', 'artist': '星号69', 'album': '雅可比', 'url': 'https://share.duanx.cn/url/wy/1840443983/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 1400821, 'platform': '网易云'}, {'id': 2141840739, 'title': '797', 'artist': '苏照钦', 'album': '797', 'url': 'https://share.duanx.cn/url/wy/2141840739/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 1419556384, 'title': '79', 'artist': 'STEPHY MARTIN', 'album': 'Happy Kids Happy Parents', 'url': 'https://share.duanx.cn/url/wy/1419556384/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 1416074, 'platform': '网易云'}, {'id': 1344802695, 'title': 'R.', 'artist': '79', 'album': 'sevenine', 'url': 'https://share.duanx.cn/url/wy/1344802695/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2152338842, 'title': '别逃了,你永远孤单^_^', 'artist': '苏照钦', 'album': '797', 'url': 'https://share.duanx.cn/url/wy/2152338842/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 3380345428, 'title': '79', 'artist': '落日收音馆', 'album': 'hiusecdb', 'url': 'https://share.duanx.cn/url/wy/3380345428/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2608841945, 'title': '神=年轻人❓❗️', 'artist': '苏照钦', 'album': '797', 'url': 'https://share.duanx.cn/url/wy/2608841945/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2147818322, 'title': '弯月亮事件', 'artist': '苏照钦', 'album': '797', 'url': 'https://share.duanx.cn/url/wy/2147818322/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 459372, 'title': '79', 'artist': '岡本光市', 'album': 'RANDOM', 'url': 'https://share.duanx.cn/url/wy/459372/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 663018, 'platform': '网易云'}, {'id': 1806176976, 'title': '怎样', 'artist': '萌七九', 'album': '怎样', 'url': 'https://share.duanx.cn/url/wy/1806176976/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2084140040, 'title': '79', 'artist': 'AKA大摆锤', 'album': 'life show', 'url': 'https://share.duanx.cn/url/wy/2084140040/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 29795969, 'title': '79', 'artist': 'Javier Dunn', 'album': 'Trails', 'url': 'https://share.duanx.cn/url/wy/29795969/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 1416692, 'platform': '网易云'}, {'id': 1960424920, 'title': '79', 'artist': '孙嘉琪', 'album': '梦想', 'url': 'https://share.duanx.cn/url/wy/1960424920/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2165799645, 'title': '妈妈追我,我追夕阳', 'artist': '苏照钦', 'album': '797', 'url': 'https://share.duanx.cn/url/wy/2165799645/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 1474728324, 'title': '七九(MEMORY IN JULY)', 'artist': '郑芃禹MR.Bryan', 'album': '七九 Memory in July', 'url': 'https://share.duanx.cn/url/wy/1474728324/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2609526563, 'title': '79%', 'artist': '三Z-STUDIO', 'album': '绝区零-Loading...', 'url': 'https://share.duanx.cn/url/wy/2609526563/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 2709549, 'platform': '网易云'}, {'id': 1332411103, 'title': '79', 'artist': 'ITSGUθY!1327', 'album': '失传breaking经典舞曲2', 'url': 'https://share.duanx.cn/url/wy/1332411103/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 3341956946, 'title': '血之辙', 'artist': '79', 'album': '血之辙', 'url': 'https://share.duanx.cn/url/wy/3341956946/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 1416318, 'platform': '网易云'}, {'id': 3314066158, 'title': '蕾塞', 'artist': '79', 'album': '窥视&PEEP AT', 'url': 'https://share.duanx.cn/url/wy/3314066158/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 498899456, 'title': '79', 'artist': 'Toromeccanica', 'album': 'Star System', 'url': 'https://share.duanx.cn/url/wy/498899456/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 1416618, 'platform': '网易云'}, {'id': 2758935307, 'title': 'Sing a Sad Song', 'artist': '79', 'album': 'Sing a Sad Song', 'url': 'https://share.duanx.cn/url/wy/2758935307/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 1459943005, 'title': '79', 'artist': 'Justinbailey', 'album': 'Bury Me With My Money', 'url': 'https://share.duanx.cn/url/wy/1459943005/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 743010, 'platform': '网易云'}, {'id': 1454745553, 'title': '79', 'artist': 'Jesse Dixon', 'album': 'Rebel Bred', 'url': 'https://share.duanx.cn/url/wy/1454745553/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 743010, 'platform': '网易云'}, {'id': 1813981019, 'title': '79', 'artist': 'NK Robin', 'album': 'Dream Of 79', 'url': 'https://share.duanx.cn/url/wy/1813981019/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 1416074, 'platform': '网易云'}, {'id': 2091403178, 'title': '柒9', 'artist': 'T..T', 'album': '我爱凯凯', 'url': 'https://share.duanx.cn/url/wy/2091403178/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'id': 2020565805, 'title': '七九', 'artist': '荆棘鸟原创', 'album': '七九', 'url': 'https://share.duanx.cn/url/wy/2020565805/128k', 'qualities': {'low': {}, 'standard': {}, 'high': {}, 'super': {}}, 'copyrightId': 0, 'platform': '网易云'}, {'isEnd': True, 'data': []}, {'isEnd': True, 'data': []}, {'isEnd': True, 'data': []}] [2026-09-16 21:51:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async PluginRunner.handleMessage (/app/xiaomusic/js_plugin_runner.js:66:30) [2026-09-16 21:51:22] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 21:51:22] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 21:51:22] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 21:51:22] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:51:22] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=Wfi06VSzTvc [2026-09-16 21:51:22] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=Wfi06VSzTvc [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:51:22] [0.6.1] [INFO] file.py:1142: [proxy:0cbfa46c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:51:22] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:51:22] [0.6.1] [INFO] file.py:1145: [proxy:0cbfa46c] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:51:22] [0.6.1] [INFO] file.py:1173: [proxy:0cbfa46c] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:51:22] [0.6.1] [INFO] file.py:1219: [proxy:0cbfa46c] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:51:22] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:51:22] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566682076"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:22] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566682076: False [2026-09-16 21:51:22] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:22] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:22] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:22] [0.6.1] [INFO] file.py:1267: [proxy:0cbfa46c] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:51:22] [0.6.1] [ERROR] file.py:1382: [proxy:0cbfa46c] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:51:22] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:22] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:51:22] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=8bSEJ906ie8 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=8bSEJ906ie8 [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1142: [proxy:fdeda05d] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1145: [proxy:fdeda05d] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1173: [proxy:fdeda05d] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1219: [proxy:fdeda05d] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:51:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:51:23] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566683034"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566683034: False [2026-09-16 21:51:23] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:23] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:23] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1267: [proxy:fdeda05d] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:51:23] [0.6.1] [ERROR] file.py:1382: [proxy:fdeda05d] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:51:23] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:51:23] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:51:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=KhzyKbakC2s [2026-09-16 21:51:23] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=KhzyKbakC2s [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1142: [proxy:9d1fc286] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:51:23] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1145: [proxy:9d1fc286] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1173: [proxy:9d1fc286] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1219: [proxy:9d1fc286] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:51:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:51:23] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566683786"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:23] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566683786: False [2026-09-16 21:51:23] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:23] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:23] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:23] [0.6.1] [INFO] file.py:1267: [proxy:9d1fc286] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:51:23] [0.6.1] [ERROR] file.py:1382: [proxy:9d1fc286] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:51:24] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:51:24] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:51:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:51:24] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:24] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:24] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:51:24] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:51:24] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=A6JaB0ioiyQ [2026-09-16 21:51:24] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=A6JaB0ioiyQ [2026-09-16 21:51:24] [0.6.1] [INFO] file.py:1142: [proxy:a3397b01] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:51:24] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:51:24] [0.6.1] [INFO] file.py:1145: [proxy:a3397b01] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:51:24] [0.6.1] [INFO] file.py:1173: [proxy:a3397b01] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:51:24] [0.6.1] [INFO] file.py:1219: [proxy:a3397b01] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:51:24] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:51:24] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:24] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566684540"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:24] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566684540: False [2026-09-16 21:51:24] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:24] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:24] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:24] [0.6.1] [INFO] file.py:1267: [proxy:a3397b01] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:51:24] [0.6.1] [ERROR] file.py:1382: [proxy:a3397b01] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:51:24] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:51:24] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:51:25] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:25] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:25] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:51:25] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:51:25] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=06CkVf4XhEo [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=06CkVf4XhEo [2026-09-16 21:51:25] [0.6.1] [INFO] file.py:1142: [proxy:fb973a00] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:51:25] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:51:25] [0.6.1] [INFO] file.py:1145: [proxy:fb973a00] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:51:25] [0.6.1] [INFO] file.py:1173: [proxy:fb973a00] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:51:25] [0.6.1] [INFO] file.py:1219: [proxy:fb973a00] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:51:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:51:25] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566685301"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566685301: False [2026-09-16 21:51:25] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:25] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:25] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:51:25] [0.6.1] [INFO] file.py:1267: [proxy:fb973a00] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:51:25] [0.6.1] [ERROR] file.py:1382: [proxy:fb973a00] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:51:25] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:51:25] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:51:25] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:51:25] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:51:25] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:51:25] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:51:25] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:51:27] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:51:27] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:51:27] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:51:27] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:51:27] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:51:27] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:51:27] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:51:33] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:51:33] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:51:34] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:51:34] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:51:34] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:51:34] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:51:34] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:51:34] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:51:35] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 52, "loop_type": 2 }'}} [2026-09-16 21:51:35] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:51:35] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:51:38] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 21:51:38] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 21:51:38] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 21:51:38] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 21:51:38] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:51:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789566698805"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:38] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566698805: True [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:51:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u54d4\u54e9\u54d4\u54e9", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const w_webid = await getWWebId(artistItem.id);\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n w_webid: w_webid,\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"\u54d4\u54e9\u54d4\u54e9\",\n appVersion: \">=0.0\",\n version: \"0.0.1\",\n author: \"sinmite\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/sinmite/source/raw/master/musicfree/bilibili.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789566699108"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 哔哩哔哩, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566699108: True [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 哔哩哔哩 [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:51:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789566699409"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566699409: True [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 21:51:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:51:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789566699711"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566699711: True [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:51:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789566700013"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566700013: True [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:51:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789566700616"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566700616: True [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 21:51:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 21:51:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789566700917"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:51:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566700917: True [2026-09-16 21:51:41] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 21:51:41] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'status': 'loaded', 'load_time': 1789566699.107641, 'enabled': True}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'status': 'loaded', 'load_time': 1789566699.4092102, 'enabled': True}, '网易音乐': {'status': 'loaded', 'load_time': 1789566699.711068, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789566700.0126975, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789566700.314634, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789566700.6158438, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789566700.9172125, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789566701.2186484, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 21:52:14] [0.6.1] [INFO] device_player.py:1142: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 52, "loop_type": 2 }'}} [2026-09-16 21:52:14] [0.6.1] [INFO] device_player.py:1149: get_volume. volume:52 [2026-09-16 21:52:17] [0.6.1] [INFO] system.py:173: modifiysetting: {'enable_pull_ask': True} [2026-09-16 21:52:17] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 21:52:17] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=eV28ZsRzVVs [2026-09-16 21:52:31] [0.6.1] [INFO] playlist.py:40: playmusiclist 2181600216 listname:_online_webPush musicname:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=1FlQdcmlilI [2026-09-16 21:52:31] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=1FlQdcmlilI [2026-09-16 21:52:31] [0.6.1] [INFO] file.py:1142: [proxy:cb18b4d4] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:52:31] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:52:31] [0.6.1] [INFO] file.py:1145: [proxy:cb18b4d4] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:52:31] [0.6.1] [INFO] file.py:1173: [proxy:cb18b4d4] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:52:31] [0.6.1] [INFO] file.py:1219: [proxy:cb18b4d4] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:52:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:52:31] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566751831"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:52:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:32] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566751831: False [2026-09-16 21:52:32] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:32] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:32] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:32] [0.6.1] [INFO] file.py:1267: [proxy:cb18b4d4] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:52:32] [0.6.1] [ERROR] file.py:1382: [proxy:cb18b4d4] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:52:32] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:52:32] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:52:32] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:52:32] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:32] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:32] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:52:32] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:52:32] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=o71NiJ-82tg [2026-09-16 21:52:32] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=o71NiJ-82tg [2026-09-16 21:52:32] [0.6.1] [INFO] file.py:1142: [proxy:1f3588d0] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:52:32] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:52:32] [0.6.1] [INFO] file.py:1145: [proxy:1f3588d0] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:52:32] [0.6.1] [INFO] file.py:1173: [proxy:1f3588d0] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:52:32] [0.6.1] [INFO] file.py:1219: [proxy:1f3588d0] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:52:32] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:52:32] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566752883"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:52:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:33] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566752883: False [2026-09-16 21:52:33] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:33] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:33] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:33] [0.6.1] [INFO] file.py:1267: [proxy:1f3588d0] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:52:33] [0.6.1] [ERROR] file.py:1382: [proxy:1f3588d0] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:52:33] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:52:33] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 21:52:33] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:52:33] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:33] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:33] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:52:33] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:52:33] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=NLnIn_hUcs0 [2026-09-16 21:52:33] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=NLnIn_hUcs0 [2026-09-16 21:52:33] [0.6.1] [INFO] file.py:1142: [proxy:44bab327] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:52:33] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:52:33] [0.6.1] [INFO] file.py:1145: [proxy:44bab327] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:52:33] [0.6.1] [INFO] file.py:1173: [proxy:44bab327] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:52:33] [0.6.1] [INFO] file.py:1219: [proxy:44bab327] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:52:33] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:52:33] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:33] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566753635"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:52:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566753635: False [2026-09-16 21:52:34] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:34] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:34] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:34] [0.6.1] [INFO] file.py:1267: [proxy:44bab327] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:52:34] [0.6.1] [ERROR] file.py:1382: [proxy:44bab327] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:52:34] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:52:34] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 21:52:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:52:34] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:34] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:34] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:52:34] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:52:34] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=0ImZgpQ-CHk [2026-09-16 21:52:34] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=0ImZgpQ-CHk [2026-09-16 21:52:34] [0.6.1] [INFO] file.py:1142: [proxy:a3e08971] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:52:34] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:52:34] [0.6.1] [INFO] file.py:1145: [proxy:a3e08971] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:52:34] [0.6.1] [INFO] file.py:1173: [proxy:a3e08971] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:52:34] [0.6.1] [INFO] file.py:1219: [proxy:a3e08971] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:52:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:52:34] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566754688"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:52:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566754688: False [2026-09-16 21:52:34] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:34] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:34] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:34] [0.6.1] [INFO] file.py:1267: [proxy:a3e08971] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:52:34] [0.6.1] [ERROR] file.py:1382: [proxy:a3e08971] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:52:34] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:52:34] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 21:52:34] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:52:35] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:35] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:35] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:52:35] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:52:35] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=3Wqu7PqQyHk [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=3Wqu7PqQyHk [2026-09-16 21:52:35] [0.6.1] [INFO] file.py:1142: [proxy:eae9e225] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:52:35] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:52:35] [0.6.1] [INFO] file.py:1145: [proxy:eae9e225] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:52:35] [0.6.1] [INFO] file.py:1173: [proxy:eae9e225] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:52:35] [0.6.1] [INFO] file.py:1219: [proxy:eae9e225] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:52:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:52:35] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789566755443"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:52:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789566755443: False [2026-09-16 21:52:35] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:35] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:35] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:52:35] [0.6.1] [INFO] file.py:1267: [proxy:eae9e225] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:52:35] [0.6.1] [ERROR] file.py:1382: [proxy:eae9e225] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:52:35] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:52:35] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 21:52:35] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 21:52:35] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:52:35] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:52:35] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:52:35] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:52:36] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 21:52:36] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:52:36] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:52:36] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 21:52:36] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 21:52:36] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 21:52:36] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 21:52:42] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:52:42] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 21:52:43] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:52:43] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:52:43] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:52:43] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:52:43] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:52:44] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:52:44] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 52, "loop_type": 2, "media_type": 3, "play_song_detail": { "audio_id": "436490277987655", "position": 3743, "duration": 4608 }, "track_list": [ "436490277987655" ] }'}} [2026-09-16 21:52:44] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:52:44] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:52:56] [0.6.1] [INFO] command_handler.py:51: 收到消息:播放歌曲后来 控制面板:False did:2181600216 [2026-09-16 21:52:56] [0.6.1] [INFO] command_handler.py:148: 匹配到指令. opkey:播放歌曲 opvalue:play oparg:后来 [2026-09-16 21:52:56] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:52:57] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 52, "loop_type": 1, "media_type": 3, "play_song_detail": { "audio_id": "508211118557102212", "position": 663, "duration": 60029 }, "track_list": [ "508211118557102212", "431966602574112", "426113172327794", "554771727067012", "1594991374686486763", "607463978558273", "545796390387886", "644045074584152", "2296948087186261916", "432887605687946" ] }'}} [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:316: play_internal. search_key:后来 name:后来 allow_download:True [2026-09-16 21:52:58] [0.6.1] [INFO] music_library.py:598: 没找到歌曲【后来】 [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:后来 匹配数量:0 auto_index:None [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:275: 本地不存在歌曲后来 [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:776: download cmd: yt-dlp bilisearch:后来 -x --audio-format mp3 --audio-quality 0 --paths music/download -o 后来.mp3 --ffmpeg-location ./ffmpeg/bin --no-playlist [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:679: try do_tts value:正在下载歌曲后来 [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 正在下载歌曲后来 [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 正在下载歌曲后来, voice: zh-CN-XiaoyiNeural [2026-09-16 21:52:58] [0.6.1] [INFO] network_utils.py:452: 语音文件生成成功: music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 [2026-09-16 21:52:58] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3, filename:tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 [2026-09-16 21:52:58] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 [2026-09-16 21:53:00] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 audio_id:436490277987655 [2026-09-16 21:53:00] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:53:00] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 [2026-09-16 21:53:00] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "2.352000" } } [2026-09-16 21:53:00] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 2.352 seconds for file: music/tmp/07fc46028ee04729bc3a278a61ebde6e.mp3 [2026-09-16 21:53:00] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 2.352 秒 [2026-09-16 21:53:00] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,2.352 秒后停止 [2026-09-16 21:53:02] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:53:02] [0.6.1] [INFO] device_player.py:738: Download Process is still running. [2026-09-16 21:53:02] [0.6.1] [INFO] device_player.py:797: 不会继续播放歌曲. isplaying:False isdownloading:True [2026-09-16 21:53:02] [0.6.1] [INFO] device_player.py:779: 正在下载中 后来 后来 [2026-09-16 21:53:04] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 21:53:04] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:53:04] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:53:04] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:53:04] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:53:05] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:53:06] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 52, "loop_type": 1, "media_type": 3, "play_song_detail": { "audio_id": "436490277987655", "position": 0, "duration": 0 }, "track_list": [ "436490277987655" ] }'}} [2026-09-16 21:53:06] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:53:06] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 21:53:14] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/download/后来.mp3 [2026-09-16 21:53:14] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "339.882667" } } [2026-09-16 21:53:14] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 339.882667 seconds for file: music/download/后来.mp3 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:975: 本地音乐 后来 时长: 339.882667 秒 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:986: 已缓存本地音乐 后来 时长: 339.882667 秒 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 21:53:14] [0.6.1] [INFO] device_player.py:809: add_download_music add_music 后来 [2026-09-16 21:53:14] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:53:14] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:53:14] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:53:14] [0.6.1] [INFO] device_player.py:513: cur_music 后来 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1184: get_music_url name:后来 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:678: try get_filename. filename:music/download/后来.mp3 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1359: _get_local_music_url local music. name:后来, filename:music/download/后来.mp3 [2026-09-16 21:53:14] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/download/后来.mp3, filename:download/后来.mp3 [2026-09-16 21:53:14] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 21:53:14] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 21:53:15] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 52, "loop_type": 1, "media_type": 3, "play_song_detail": { "audio_id": "436490277987655", "position": 0, "duration": 2352 }, "track_list": [ "436490277987655" ] }'}} [2026-09-16 21:53:15] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 21:53:15] [0.6.1] [INFO] device_player.py:588: 发送指令给小爱,开始播放: https://music.9996655.xyz:443/music/download/%E5%90%8E%E6%9D%A5.mp3 [2026-09-16 21:53:17] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/download/%E5%90%8E%E6%9D%A5.mp3 audio_id:690984269728317 [2026-09-16 21:53:17] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/download/%E5%90%8E%E6%9D%A5.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 21:53:17] [0.6.1] [INFO] device_player.py:603: 【后来】已经开始播放了 [2026-09-16 21:53:17] [0.6.1] [INFO] analytics.py:78: analytics run_with_cancel success [2026-09-16 21:53:17] [0.6.1] [ERROR] command_handler.py:74: Execption list index out of range Traceback (most recent call last): File "/app/xiaomusic/command_handler.py", line 71, in do_check_cmd await func(did=did, arg1=oparg) File "/app/xiaomusic/xiaomusic.py", line 556, in play return await self.do_play(did, name, search_key) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/xiaomusic/xiaomusic.py", line 560, in do_play return await self.device_manager.devices[did].play(name, search_key) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/xiaomusic/device_player.py", line 259, in play return await self._play(name=name, search_key=search_key) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/xiaomusic/device_player.py", line 416, in _play return await self._play_internal( ^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<3 lines>... ) ^ File "/app/xiaomusic/device_player.py", line 399, in _play_internal await self._playmusic(name) File "/app/xiaomusic/device_player.py", line 647, in _playmusic await self.auto_add_song(cur_playlist, sleep_sec) File "/app/xiaomusic/device_player.py", line 140, in auto_add_song await self._add_singer_song(cur_list_name, cur_music, sleep_sec) File "/app/xiaomusic/device_player.py", line 147, in _add_singer_song singer_name = cur_music.split("-")[1] ~~~~~~~~~~~~~~~~~~~~^^^ IndexError: list index out of range [2026-09-16 21:53:17] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:53:17] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:53:17] [0.6.1] [INFO] device_player.py:1123: 347.87888687342837 秒后将会播放下一首歌曲 did: 2181600216 [2026-09-16 21:53:17] [0.6.1] [INFO] device_player.py:1088: reset_timer 延长定时器. answer_length:35 pause_time:8.0 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:1099: 定时器时间到了 did: 2181600216 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:440: get_next_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:441: _play_next. name:任素汐 【无损母带】精选合集-慢oo播, cur_music:后来 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:任素汐 【无损母带】精选合集-慢oo播 allow_download:True [2026-09-16 21:59:05] [0.6.1] [INFO] music_library.py:600: 根据【任素汐 【无损母带】精选合集-慢oo播】找到歌曲【['任素汐 【无损母带】精选合集-慢oo播']】 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:任素汐 【无损母带】精选合集-慢oo播 匹配数量:1 auto_index:None [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:513: cur_music 任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:59:05] [0.6.1] [INFO] music_library.py:1184: get_music_url name:任素汐 【无损母带】精选合集-慢oo播 [2026-09-16 21:59:05] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 21:59:05] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:任素汐 【无损母带】精选合集-慢oo播, url:self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ== [2026-09-16 21:59:05] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=LWAalP-vNR8 [2026-09-16 21:59:05] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=LWAalP-vNR8 [2026-09-16 21:59:05] [0.6.1] [INFO] file.py:1142: [proxy:d32386e2] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdT [2026-09-16 21:59:05] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') [2026-09-16 21:59:05] [0.6.1] [INFO] file.py:1145: [proxy:d32386e2] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJcdTRlZmJcdTdkMjBcdTZjNTAiLCAiXHU3Y2JlXHU5MDA5XHU1NDA4XHU5NmM2IiwgIlx1NmJjZFx1NWUyNiIsICJcdTU0MmNcdTZiNGMiLCAiXHU5YWQ4XHU5N2YzXHU4ZDI4IiwgIlx1N2VjZlx1NTE3OCIsICJcdTZiNGNcdTY2ZjIiXSwgImRhdGUiOiAiMjAyNi0wOS0xMiIsICJwbGF0Zm9ybSI6ICJcdTU0ZDRcdTU0ZTlcdTU0ZDRcdTU0ZTkifQ==', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog [2026-09-16 21:59:05] [0.6.1] [INFO] file.py:1173: [proxy:d32386e2] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 21:59:05] [0.6.1] [INFO] file.py:1219: [proxy:d32386e2] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjog headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 21:59:05] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: 哔哩哔哩 [2026-09-16 21:59:05] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:59:05] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "\u54d4\u54e9\u54d4\u54e9", "musicItem": {"id": "BV1ZrYR6BEX3", "aid": 117258361767866, "bvid": "BV1ZrYR6BEX3", "artist": "\u6162oo\u64ad", "title": "\u4efb\u7d20\u6c50 \u3010\u65e0\u635f\u6bcd\u5e26\u3011\u7cbe\u9009\u5408\u96c6", "album": "BV1ZrYR6BEX3", "artwork": "http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg", "duration": 1801, "tags": ["\u4efb\u7d20\u6c50", "\u7cbe\u9009\u5408\u96c6", "\u6bcd\u5e26", "\u542c\u6b4c", "\u9ad8\u97f3\u8d28", "\u7ecf\u5178", "\u6b4c\u66f2"], "date": "2026-09-12", "platform": "\u54d4\u54e9\u54d4\u54e9"}, "quality": "standard", "id": "msg_1789567145102"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 21:59:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] getMediaSource error in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:59:05] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789567145102: False [2026-09-16 21:59:05] [0.6.1] [ERROR] js_plugin_manager.py:2314: JS Plugin Manager getMediaSource failed in plugin 哔哩哔哩: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:59:05] [0.6.1] [ERROR] online_music.py:1620: Plugin 哔哩哔哩 get_media_source failed: getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 21:59:05] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 'BV1ZrYR6BEX3', 'aid': 117258361767866, 'bvid': 'BV1ZrYR6BEX3', 'artist': '慢oo播', 'title': '任素汐 【无损母带】精选合集', 'album': 'BV1ZrYR6BEX3', 'artwork': 'http://i2.hdslb.com/bfs/archive/32ff40128df5fb1c3ff3970ade697d475c4c511c.jpg', 'duration': 1801, 'tags': ['任素汐', '精选合集', '母带', '听歌', '高音质', '经典', '歌曲'], 'date': '2026-09-12', 'platform': '哔哩哔哩'} [2026-09-16 21:59:05] [0.6.1] [INFO] file.py:1267: [proxy:d32386e2] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6ICJCVjFacllSNkJFWDMiLCAiYWlkIjogMTE3MjU4MzYxNzY3ODY2LCAiYnZpZCI6ICJCVjFacllSNkJFWDMiLCAiYXJ0aXN0IjogIlx1NjE2Mm9vXHU2NGFkIiwgInRpdGxlIjogIlx1NGVmYlx1N2QyMFx1NmM1MCBcdTMwMTBcdTY1ZTBcdTYzNWZcdTZiY2RcdTVlMjZcdTMwMTFcdTdjYmVcdTkwMDlcdTU0MDhcdTk2YzYiLCAiYWxidW0iOiAiQlYxWnJZUjZCRVgzIiwgImFydHdvcmsiOiAiaHR0cDovL2kyLmhkc2xiLmNvbS9iZnMvYXJjaGl2ZS8zMmZmNDAxMjhkZjVmYjFjM2ZmMzk3MGFkZTY5N2Q0NzVjNGM1MTFjLmpwZyIsICJkdXJhdGlvbiI6IDE4MDEsICJ0YWdzIjogWyJc content_type=application/json content_length=43 [2026-09-16 21:59:05] [0.6.1] [ERROR] file.py:1382: [proxy:d32386e2] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 21:59:05] [0.6.1] [WARNING] device_player.py:560: 探路发现死链!接口报错,状态码: 500 [2026-09-16 21:59:05] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 1 [2026-09-16 21:59:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action getMediaSource failed: getMediaSource failed in plugin 哔哩哔哩: Request failed with status code 412 [2026-09-16 22:19:49] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 22:19:49] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 22:19:49] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 22:19:49] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 22:19:50] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 22:20:00] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:00] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:00] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:00] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 22:20:00] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:00] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789568400843"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568400843: True [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u54d4\u54e9\u54d4\u54e9", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const w_webid = await getWWebId(artistItem.id);\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n w_webid: w_webid,\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"\u54d4\u54e9\u54d4\u54e9\",\n appVersion: \">=0.0\",\n version: \"0.0.1\",\n author: \"sinmite\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/sinmite/source/raw/master/musicfree/bilibili.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789568401145"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 哔哩哔哩, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568401145: True [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 哔哩哔哩 [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568401447"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568401447: True [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:01] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568401749"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:01] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568401749: True [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568402050"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568402050: True [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789568402653"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:02] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568402653: True [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:02] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568402955"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:03] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:03] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568402955: True [2026-09-16 22:20:03] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:03] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'status': 'loaded', 'load_time': 1789568401.1450095, 'enabled': True}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'status': 'loaded', 'load_time': 1789568401.446669, 'enabled': True}, '网易音乐': {'status': 'loaded', 'load_time': 1789568401.7485435, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568402.0502172, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568402.352088, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568402.6533492, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789568402.9549007, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568403.2562642, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 酷我 [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u54d4\u54e9\u54d4\u54e9", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const w_webid = await getWWebId(artistItem.id);\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n w_webid: w_webid,\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"\u54d4\u54e9\u54d4\u54e9\",\n appVersion: \">=0.0\",\n version: \"0.0.1\",\n author: \"sinmite\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/sinmite/source/raw/master/musicfree/bilibili.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789568409535"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 哔哩哔哩, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568409535: True [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 哔哩哔哩 [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568409836"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568409836: True [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568410138"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568410138: True [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568410440"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568410440: True [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:10] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789568411043"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568411043: True [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568411344"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568411344: True [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'status': 'loaded', 'load_time': 1789568409.836228, 'enabled': True}, '网易音乐': {'status': 'loaded', 'load_time': 1789568410.1381156, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568410.4397454, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568410.7415335, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568411.0427322, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789568411.3441956, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568411.6455634, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:20:11] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u54d4\u54e9\u54d4\u54e9", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const w_webid = await getWWebId(artistItem.id);\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n w_webid: w_webid,\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"\u54d4\u54e9\u54d4\u54e9\",\n appVersion: \">=0.0\",\n version: \"0.0.1\",\n author: \"sinmite\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/sinmite/source/raw/master/musicfree/bilibili.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789568411892"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:11] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 哔哩哔哩, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568411892: True [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 哔哩哔哩 [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568412194"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568412194: True [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568412496"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568412496: True [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:12] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568412798"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:12] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568412798: True [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789568413401"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568413401: True [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:13] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568413702"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:13] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:14] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568413702: True [2026-09-16 22:20:14] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:14] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'status': 'loaded', 'load_time': 1789568412.1940427, 'enabled': True}, '网易音乐': {'status': 'loaded', 'load_time': 1789568412.4958518, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568412.7976336, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568413.0993328, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568413.4006095, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789568413.7019267, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568414.003158, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 哔哩哔哩 [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:15] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568415678"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:15] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568415678: True [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:15] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:15] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568415980"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568415980: True [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568416282"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568416282: True [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:16] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789568416885"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:16] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568416885: True [2026-09-16 22:20:17] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 22:20:17] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:17] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568417186"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:17] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:17] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568417186: True [2026-09-16 22:20:17] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:17] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'status': 'loaded', 'load_time': 1789568415.9799786, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568416.2816617, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568416.5832953, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568416.8846765, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789568417.1861866, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568417.4875433, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:18] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568418177"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:18] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568418177: True [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:18] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568418479"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:18] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568418479: True [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:18] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:18] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568418781"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:18] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568418781: True [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:19] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i {\n var _a;\n return (_a =\n _ === null || _ === void 0\n ? void 0\n : _.author_name) !== null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\n\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\n\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\n\nasync function getMediaSource(musicItem, quality) {\n const userQuality = PLUGIN_QUALITY_MAP[quality] || '128k';\n const apiLevel = QUALITY_MAP[userQuality];\n if (!apiLevel) throw new Error(`\u4e0d\u652f\u6301\u7684\u97f3\u8d28: ${quality}`);\n \n const songId = musicItem.id;\n if (!songId) throw new Error('\u627e\u4e0d\u5230\u6b4c\u66f2ID');\n \n const url = `https://music.nxinxz.com${API_PATHS.kg}?id=${encodeURIComponent(songId)}&level=${encodeURIComponent(apiLevel)}&type=mp3`;\n return { url };\n}\n\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\n\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\n\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\n\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\n\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\n\nmodule.exports = {\n platform: \"\u9177\u72d7(\u5ff5\u5fc3\u97f3\u6e90)\",\n version: \"1.0.0\",\n author: \"\u73a5\u7136OvO\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"\",\n cacheControl: \"no-cache\",\n description: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E5%BF%B5%E5%BF%83.js\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789568419384"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:19] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_念心, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568419384: True [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_念心 [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:19] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34vip", "code": "const axios = require('axios');\n\nconst CONFIG = {\n platform: \"\u6c7d\u6c34 Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.2.0\",\n srcUrl: \"https://gitee.com/janyun/music-free-plugin/raw/master/qishui.vip.js\",\n primaryKey: [\"id\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 id\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165\u6c7d\u6c34\u97f3\u4e50\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\"],\n },\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000, // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n apiBase: 'http://api.vsaa.cn/api/music.qishui.vip', // API\u57fa\u7840\u5730\u5740\n proxyServer: 'https://proxy.qishui.vsaa.cn/qishui/proxy' // \u4ee3\u7406\u670d\u52a1\u5668\u5730\u5740\n};\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nconst Utils = {\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n */\n retryRequest: function(requestFn, retries, delay) {\n const _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n const attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568419686"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:19] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568419686: True [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:19] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'status': 'loaded', 'load_time': 1789568418.4792337, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568418.7809186, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568419.0826805, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568419.3840072, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'status': 'loaded', 'load_time': 1789568419.6855934, 'enabled': True}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568419.9868383, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:20] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 酷狗_念心 [2026-09-16 22:20:20] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:20] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:20] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:20] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:20] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:20] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568420879"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:20] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568420879: True [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568421180"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568421180: True [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568421482"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568421482: True [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:21] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568422085"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568422085: True [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'status': 'loaded', 'load_time': 1789568421.1803703, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568421.481949, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568421.7837043, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568422.0851097, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568422.386477, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568422655"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568422655: True [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:22] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568422956"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568422956: True [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568423258"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568423258: True [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:23] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568423861"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:23] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:24] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568423861: True [2026-09-16 22:20:24] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:24] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'status': 'loaded', 'load_time': 1789568422.9563618, 'enabled': True}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568423.2580266, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568423.5598123, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568423.8615503, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568424.162901, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 网易音乐 [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568425406"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568425406: True [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:25] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568425708"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:25] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568425708: True [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568426311"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568426311: True [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568425.707697, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568426.0094693, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568426.3106945, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568426.61217, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:26] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u4e91", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/wy.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n // \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\u6570\u636e\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n // \u76f4\u63a5\u683c\u5f0f\u5316\u6b4c\u66f2\u9879\uff0c\u4e0d\u68c0\u67e5 URL\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/wy\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u4e91\",\n author: \"t.me/JHMS_Channel\",\n version: \"0.1.0\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568426859"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:26] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易云, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568426859: True [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易云 [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568427160"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568427160: True [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568427763"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:28] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568427763: True [2026-09-16 22:20:28] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:28] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'status': 'loaded', 'load_time': 1789568427.1601639, 'enabled': True}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568427.4618862, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568427.76325, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568428.06455, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:30] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 网易云 [2026-09-16 22:20:30] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:30] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:30] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:30] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:30] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:30] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568430908"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568430908: True [2026-09-16 22:20:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:31] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:31] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568431511"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:31] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:31] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568431511: True [2026-09-16 22:20:31] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:31] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568431.2098892, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568431.5113318, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568431.8126493, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568432066"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568432066: True [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nconst DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n */\n transformSong: function(item) {\n return {\n platform: CONFIG.platform,\n id: item.id || '',\n title: item.name || '\u672a\u77e5\u6b4c\u66f2',\n artist: item.artists || '\u672a\u77e5\u6b4c\u624b',\n artwork: item.cover || '',\n album: item.album || '\u672a\u77e5\u4e13\u8f91',\n duration: Math.floor(item.duration/1000 || 0),\n rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nconst ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n */\n request: function(endpoint, params, retryCount) {\n console.log('\u8bf7\u6c42\u63a5\u53e3: ' + endpoint + '\uff0c\u53c2\u6570:', params);\n \n const requestFn = () => {\n return axios.get(CONFIG.apiBase, {\n params: { act: endpoint, ...params },\n timeout: 10000\n }).then(response => {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n return Utils.retryRequest(requestFn, retryCount).catch(error => {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n \n return this.request('search', {\n keywords: query,\n page: page,\n pagesize: pagesize,\n type: type\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nconst Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n */\n search: function(query, page, type, pagesize = CONFIG.pageSize) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type, pagesize).then(response => {\n const data = response.data || {};\n let transformer;\n \n switch (type) {\n default:\n transformer = DataTransformer.transformSong;\n }\n \n const items = (data.lists || []).map(transformer);\n const totalPages = Math.ceil(data.total / CONFIG.pageSize);\n const isEnd = page >= totalPages;\n \n return { \n isEnd: isEnd, \n data: items, \n total: data.total || items.length \n };\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n */\n getMediaSource: async function(mediaItem, quality = 'standard') {\n if (!mediaItem?.id) return null;\n\n try {\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const { data } = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: mediaItem.id, quality },\n timeout: 15000\n });\n\n const song = data?.data?.[0];\n // console.log(song)\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return this.buildAudioInfo(song, song.url);\n }\n \n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.post(\n CONFIG.proxyServer,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: 'aac'\n },\n {\n timeout: 60000,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n\n if (proxyRes.data?.code === 200) {\n return { url: proxyRes.data.url }\n } else {\n console.warn('\u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:', proxyRes.data?.msg || '\u672a\u77e5\u9519\u8bef');\n }\n } catch (err) {\n console.warn('\u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:', err.message);\n }\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: '\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c'\n };\n\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u6e90\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n */\n getLyric: async function(musicItem) {\n if (!musicItem?.id) return null;\n \n try {\n const response = await axios.get(CONFIG.apiBase, {\n params: { act: 'song', id: musicItem.id },\n timeout: 10000\n });\n return { rawLrc: response.data?.data?.[0]?.lyric || null };\n } catch (error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error.message);\n return null;\n }\n },\n /**\n * \u6b4c\u5355\u5bfc\u5165\n */\n importMusicSheet: async function(input) {\n return ApiService.request('playlist', { id: input }).then(response => {\n const data = response.data || {};\n const items = (data.list || []).map(DataTransformer.transformSong);\n console.log(data)\n return items;\n }).catch(error => {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return [];\n });\n },\n\n};\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n importMusicSheet: Service.importMusicSheet\n};", "id": "msg_1789568432669"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:32] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568432669: True [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水vip [2026-09-16 22:20:32] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'name': 'Audiomack', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'status': 'loaded', 'load_time': 1789568432.3680584, 'enabled': True}, 'CCTV听音': {'status': 'loaded', 'load_time': 1789568432.6692853, 'enabled': True}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'status': 'loaded', 'load_time': 1789568432.970612, 'enabled': True}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:20:33] [0.6.1] [INFO] js_plugin_manager.py:2645: Plugin config updated for enabled plugin 汽水vip [2026-09-16 22:20:33] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:33] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:33] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:33] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:33] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:33] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ Vip", "code": "const axios = require('axios');\n\n/**\n * \u79cb\u79cb\u63d2\u4ef6\u914d\u7f6e\n * \u7248\u672c: 2.1.0\n * \u4f5c\u8005\uff1a\u7b80\u4e91\n * \u90ae\u7bb1\uff1a603212202@qq.com\n * \u521b\u5efa\u65f6\u95f4\uff1a2026/1/21 am\n */\nvar CONFIG = {\n platform: \"QQ Vip\",\n author: \"\u7b80\u4e91\",\n version: \"2.1.0\",\n srcUrl: \"https://gitee.com/csdjrw/music-free-plugin/raw/master/qq.vip.js\",\n primaryKey: [\"id\",\"mid\"],\n cacheControl: \"no-store\",\n hints: {\n importMusicItem: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216 hash\",\"\u793a\u4f8b\uff1a000FkzFx2qSs84 | https://c6.y.qq.com/base/fcgi-bin/u?__=SAukJ32wI4Td\"],\n importMusicSheet: [\"\u8bf7\u8f93\u5165QQ\u6b4c\u5355\u94fe\u63a5\u6216 \u6b4c\u5355id\", \"\u793a\u4f8b\uff1a1769768332 | https://y.qq.com/n/ryqq/playlist/1769768332\"],\n },\n // \u4ee5\u4e0b\u53ef\u65e0\u89c6\n userVariables: [\n {\n key: \"QQ\",\n title: \"\u60a8\u7684QQ\u53f7\u7801\",\n },\n {\n key: \"apikey\",\n title: \"\u60a8\u7684music.qq\u63a5\u53e3\u7684apikey\",\n }\n ],\n pageSize: 30,\n supportedSearchType: ['music', 'album', 'sheet', 'lyric', 'artist', 'mv'],\n requestRetryCount: 3, // \u8bf7\u6c42\u91cd\u8bd5\u6b21\u6570\n requestRetryDelay: 1000 // \u91cd\u8bd5\u5ef6\u8fdf\u65f6\u95f4(\u6beb\u79d2)\n};\n\n\nconst DEFAULT_APIKEY = 'fb5401d5dad8a2917a71e5d8a327fb71';\nconst GET_URL_BASE = 'https://api.vsaa.cn/api/music.qq';\nconst API_BASE = 'http://api.vsaa.cn/api/music.qq.vip';\n\n/**\n * \u5de5\u5177\u51fd\u6570\u96c6\n */\nvar Utils = {\n /**\n * \u6784\u5efa\u56fe\u7247URL\n * @param {string} url - \u539f\u59cb\u56fe\u7247URL\n * @returns {string} \u5904\u7406\u540e\u7684\u56fe\u7247URL\n */\n buildImage: function(url) {\n if (!url) return '';\n if (url.indexOf('{size}') !== -1) {\n return url.replace('{size}', '500');\n }\n return url;\n },\n\n /**\n * \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\n * @param {string|Array} singer - \u6b4c\u624b\u4fe1\u606f\n * @returns {string} \u683c\u5f0f\u5316\u540e\u7684\u6b4c\u624b\u5b57\u7b26\u4e32\n */\n formatArtist: function(singer) {\n if (!singer) return '';\n if (Array.isArray(singer)) {\n return singer.join(' / ');\n }\n return singer;\n },\n\n /**\n * \u5ef6\u8fdf\u51fd\u6570\n * @param {number} ms - \u5ef6\u8fdf\u6beb\u79d2\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n delay: function(ms) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n },\n\n /**\n * \u5e26\u91cd\u8bd5\u7684\u8bf7\u6c42\u51fd\u6570\n * @param {Function} requestFn - \u8bf7\u6c42\u51fd\u6570\n * @param {number} retries - \u91cd\u8bd5\u6b21\u6570\n * @param {number} delay - \u91cd\u8bd5\u5ef6\u8fdf(\u6beb\u79d2)\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n retryRequest: function(requestFn, retries, delay) {\n var _this = this;\n retries = retries || CONFIG.requestRetryCount;\n delay = delay || CONFIG.requestRetryDelay;\n \n return new Promise(function(resolve, reject) {\n var attemptRequest = function(attempt) {\n requestFn().then(resolve).catch(function(error) {\n if (attempt >= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568433950"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:34] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568433950: True [2026-09-16 22:20:34] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:34] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:34] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i= retries) {\n reject(error);\n return;\n }\n \n console.warn('\u8bf7\u6c42\u5931\u8d25\uff0c\u7b2c' + (attempt + 1) + '\u6b21\u91cd\u8bd5...', error.message);\n \n if (delay > 0) {\n _this.delay(delay).then(function() {\n attemptRequest(attempt + 1);\n });\n } else {\n attemptRequest(attempt + 1);\n }\n });\n };\n \n attemptRequest(0);\n });\n }\n};\n\n/**\n * \u6570\u636e\u8f6c\u6362\u5668\n */\nvar DataTransformer = {\n /**\n * \u8f6c\u6362\u6b4c\u66f2\u6570\u636e\n * @param {Object} item - \u539f\u59cb\u6b4c\u66f2\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u66f2\u4fe1\u606f\n */\n transformSong: function(item) {\n \n // \u5b89\u5168\u83b7\u53d6\u5d4c\u5957\u5c5e\u6027\n var songInfo = item.songInfo || {};\n var album = item.album || songInfo.album || {};\n var singers = item.singer || songInfo.singer || [];\n var fileInfo = item.file || songInfo.file || {};\n var vs = item.vs || songInfo.vs || [];\n \n var result = {\n platform: CONFIG.platform,\n id: item.id || songInfo.id || '',\n mid: item.mid || songInfo.mid || '',\n title: '',\n artist: '',\n artwork: '',\n album: '',\n duration: 0,\n albumid: '',\n media_mid: ''\n };\n \n // \u5904\u7406\u6807\u9898\n result.title = item.title || songInfo.title || '';\n \n // \u5904\u7406\u6b4c\u624b - \u5c06\u6240\u6709\u6b4c\u624b\u540d\u5b57\u7528\u659c\u6760\u8fde\u63a5\n if (singers && singers.length > 0) {\n var artistNames = [];\n for (var i = 0; i < singers.length; i++) {\n if (singers[i] && singers[i].name) {\n artistNames.push(singers[i].name);\n }\n }\n result.artist = artistNames.join(' / ') || '';\n } else {\n result.artist = '';\n }\n \n // \u5904\u7406\u4e13\u8f91 - \u5b89\u5168\u8bbf\u95ee\n result.album = album.name || '';\n \n // \u5904\u7406\u4e13\u8f91ID\n result.albumid = album.mid || '';\n \n // \u5904\u7406\u5c01\u9762\n if (result.album && result.albumid) {\n result.artwork = `https://y.gtimg.cn/music/photo_new/T002R500x500M000${result.albumid}.jpg`;\n } else if (vs[1]) {\n result.artwork = `https://y.qq.com/music/photo_new/T062R300x300M000${vs[1]}.jpg`;\n } else if (singers.length > 0 && singers[0].mid) {\n // \u4f7f\u7528\u7b2c\u4e00\u4e2a\u6b4c\u624b\u7684mid\n result.artwork = `https://y.qq.com/music/photo_new/T001R300x300M000${singers[0].mid}.jpg`;\n } else {\n result.artwork = ''; // \u7559\u7a7a\u800c\u4e0d\u662f\u4f7f\u7528\u53ef\u80fd\u51fa\u9519\u7684\u7ed3\u6784\n }\n \n // \u5904\u7406\u65f6\u957f\n result.duration = item.interval || songInfo.interval || 0;\n\n // file_mid - \u5b89\u5168\u8bbf\u95ee\n result.media_mid = fileInfo.media_mid || '';\n return result;\n },\n \n /**\n * \u8f6c\u6362\u4e13\u8f91\u6570\u636e\n * @param {Object} album - \u539f\u59cb\u4e13\u8f91\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u4e13\u8f91\u4fe1\u606f\n */\n transformAlbum: function(album) {\n var a = album || {};\n return {\n platform: CONFIG.platform,\n id: a.id || a.albumID || '',\n mid: a.albummid || a.albumMid || '',\n title: (a.name || a.albumName || '').replace(/|<\\/em>/g, ''),\n artist: a.singer || a.singerName || '',\n artwork: a.pic || 'https://y.gtimg.cn/music/photo_new/T002R800x800M000{albummid}.jpg'.replace('{albummid}', a.albummid || a.albumMid || ''),\n rawData: a\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u5355\u6570\u636e\n * @param {Object} sheet - \u539f\u59cb\u6b4c\u5355\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\n */\n transformSheet: function(sheet) {\n var item = sheet || {};\n return {\n platform: CONFIG.platform,\n id: item.dissid || item.docid || '',\n title: (item.dissname || '').replace(/|<\\/em>/g, '') || '',\n artwork: item.logo || '',\n description: (item.description || '').replace(/|<\\/em>/g, '') || '',\n playCount: item.listennum || item.listennum_long || 0,\n worksNums: item.songnum || 0,\n artist: item.nickname || '',\n createAt: item.createtime || '',\n rawData: item\n };\n },\n \n /**\n * \u8f6c\u6362\u6b4c\u624b\u6570\u636e\n * @param {Object} artist - \u539f\u59cb\u6b4c\u624b\u6570\u636e\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u624b\u4fe1\u606f\n */\n transformArtist: function(artist) {\n var item = artist || {};\n return {\n platform: CONFIG.platform,\n id: item.singerID || '',\n mid: item.singerMID || '',\n name: item.singerName || '',\n avatar: item.singerPic || '',\n worksNum: item.songNum || 0,\n // rawData: item\n };\n }\n};\n\n/**\n * API\u670d\u52a1\u5c42\n */\nvar ApiService = {\n /**\n * \u53d1\u8d77\u5e26\u91cd\u8bd5\u7684API\u8bf7\u6c42\n * @param {string} endpoint - API\u7aef\u70b9\n * @param {Object} params - \u8bf7\u6c42\u53c2\u6570\n * @param {number} retryCount - \u91cd\u8bd5\u6b21\u6570\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n request: function(endpoint, params, retryCount) {\n \n var requestFn = function() {\n return axios.get(API_BASE, {\n params: Object.assign({ act: endpoint }, params),\n timeout: 10000\n }).then(function(response) {\n return response.data;\n });\n };\n \n retryCount = retryCount || CONFIG.requestRetryCount;\n \n return Utils.retryRequest(requestFn, retryCount).catch(function(error) {\n throw new Error('API\u8bf7\u6c42\u5931\u8d25(' + endpoint + '): ' + error.message);\n });\n },\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n var typeMap = {\n music: '0',\n album: '2', \n sheet: '3',\n lyric: '7',\n artist: '1'\n };\n \n var searchType = typeMap[type] || 'song';\n page = page || 1;\n \n return this.request('search.search_by_type', {\n keyword: query,\n page: page,\n num: CONFIG.pageSize,\n search_type: searchType\n });\n }\n};\n\n/**\n * \u4e1a\u52a1\u903b\u8f91\u5c42\n */\nvar Service = {\n /**\n * \u641c\u7d22\u97f3\u4e50\u5185\u5bb9\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u7c7b\u578b: music/album/sheet/lyric/artist/mv\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n search: function(query, page, type) {\n page = page || 1;\n type = type || 'music';\n \n if (CONFIG.supportedSearchType.indexOf(type) === -1) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.search(query, page, type).then(function(response) {\n var data = response.data || {};\n var transformer;\n \n switch (type) {\n case 'sheet':\n transformer = DataTransformer.transformSheet;\n break;\n case 'album':\n transformer = DataTransformer.transformAlbum;\n break;\n case 'artist':\n transformer = DataTransformer.transformArtist;\n break;\n default:\n transformer = DataTransformer.transformSong;\n }\n var items = (data || []).map(transformer);\n var totalPages = Math.ceil(data.total / CONFIG.pageSize);\n var isEnd = page >= totalPages;\n \n return { isEnd: isEnd, data: items, total: data.total || items.length };\n }).catch(function(error) {\n console.error('\u641c\u7d22\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u97f3\u6e90\u64ad\u653e\u5730\u5740\n * @param {Object} mediaItem - \u5a92\u4f53\u9879\n * @param {string} quality - \u97f3\u8d28: low/standard/high/super\n */\n getMediaSource: function(mediaItem, quality) {\n quality = quality || 'standard';\n \n if (!mediaItem || !mediaItem.mid) {\n return Promise.resolve({});\n }\n \n const default_apikey = DEFAULT_APIKEY;\n const apikey = (typeof env !== 'undefined' && env.getUserVariables && env.getUserVariables().apikey) \n ? env.getUserVariables().apikey \n : default_apikey;\n \n return axios.get(GET_URL_BASE, {\n params: {\n apikey: apikey,\n action: 'media_source',\n id: mediaItem.mid,\n media_mid: mediaItem.media_mid || '',\n quality: quality\n },\n timeout: 10000\n }).then(function(response) {\n return response.data || {};\n }).catch(function(error) {\n throw new Error('\u83b7\u53d6\u64ad\u653e\u5730\u5740\u5931\u8d25: ' + (error.message || '\u7f51\u7edc\u9519\u8bef'));\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u8bcd\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getLyric: function(musicItem) {\n return ApiService.request('lyric.get_lyric', { value: musicItem.mid, qrc: 0, trans: 1, roma: 1 })\n .then(function(data) {\n if (data.code == 200 && data.data.lyric) {\n return { rawLrc: data.data.lyric || \"\", translation: data.data.trans || \"\", msg: \"\u83b7\u53d6\u6b4c\u8bcd\u6210\u529f\" };\n } else {\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n }\n })\n .catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u8bcd\u5931\u8d25:', error);\n return { rawLrc: \"\", translation: \"\", msg: \"\u672a\u83b7\u53d6\u5230\u6b4c\u8bcd\u4fe1\u606f\" };\n });\n },\n\n /**\n * \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n * @param {Object} albumItem - \u4e13\u8f91\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getAlbumInfo: function(albumItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('album.get_detail', { value: albumItem.mid }),\n ApiService.request('album.get_song', { \n value: albumItem.mid, \n page: page,\n num: pagesize\n })\n ]).then(function(results) {\n var albumInfoRes = results[0];\n var songsRes = results[1];\n \n var albumInfo = (albumInfoRes.data) || {};\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.length / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.albumItem = { description: albumInfo.desc || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n * @param {Object} sheetItem - \u6b4c\u5355\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicSheetInfo: function(sheetItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || CONFIG.pageSize;\n \n return Promise.all([\n ApiService.request('songlist.get_detail', { \n songlist_id: sheetItem.id, \n page: page, \n num: pagesize,\n onlysong: true\n })\n ]).then(function(results) {\n var songsRes = results[0];\n var data = songsRes.data || {};\n var totalPages = Math.ceil(data.total_song_num / pagesize);\n var isEnd = page >= totalPages;\n var musicList = (data.songlist || []).map(DataTransformer.transformSong);\n \n var result = { isEnd: isEnd, musicList: musicList };\n if (page <= 1) {\n result.sheetItem = { description: sheetItem.description || '' };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25:', error);\n return { isEnd: true, musicList: [] };\n });\n },\n\n /**\n * \u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5217\u8868\n * @param {Object} artistItem - \u6b4c\u624b\u9879\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u4f5c\u54c1\u7c7b\u578b: music/album\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getArtistWorks: function(artistItem, page, type = 'music') {\n page = page || 1;\n type = type || 'music';\n \n const pageSize = (typeof CONFIG !== 'undefined' && CONFIG.pageSize) || 30;\n const number = pageSize;\n const begin = (page - 1) * pageSize;\n \n const apiMap = {\n 'music': { api: 'singer.get_songs_list', listKey: 'songList', transform: DataTransformer.transformSong },\n 'album': { api: 'singer.get_album_list', listKey: 'albumList', transform: DataTransformer.transformAlbum }\n };\n \n const config = apiMap[type];\n if (!config) {\n return Promise.resolve({ isEnd: true, data: [] });\n }\n \n return ApiService.request(config.api, { \n mid: artistItem.mid, \n number: number, \n begin: begin\n }).then(function(response) {\n const data = response.data || response;\n const list = data[config.listKey] || data.data || [];\n const transformedData = list.map(config.transform);\n const total = data.totalNum || data.total || 0;\n const totalPages = Math.ceil(total / pageSize);\n const isEnd = page >= totalPages;\n \n const result = { isEnd: isEnd, data: transformedData };\n \n if (page <= 1 && artistItem) {\n result.artistItem = { \n description: artistItem.intro || artistItem.description || '' \n };\n }\n \n return result;\n }).catch(function(error) {\n console.error('\u83b7\u53d6\u6b4c\u624b\u4f5c\u54c1\u5931\u8d25:', error);\n return { isEnd: true, data: [] };\n });\n },\n\n /**\n * \u5bfc\u5165\u5355\u66f2\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u66f2\u5206\u4eab\u94fe\u63a5\u6216\u6b4c\u66f2mid\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicItem: function(urlLike) {\n function getMid(str) {\n var match = str.match(/([a-z0-9]{14})/i);\n return match ? match[1] : null;\n }\n return Promise.resolve().then(function() {\n var mid = getMid(urlLike);\n if (mid) return mid;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getMid(finalUrl);\n })\n .catch(function(error) {\n if (error.response && error.response.request) {\n var finalUrl = error.response.request.res.responseUrl;\n return getMid(finalUrl);\n }\n return null;\n })\n .then(function(foundMid) {\n if (!foundMid) {\n throw new Error('\u65e0\u6cd5\u4eceURL\u4e2d\u63d0\u53d6\u6b4c\u66f2ID');\n }\n return foundMid;\n });\n })\n .then(function(mid) {\n return ApiService.request('song.query_song', { value: mid });\n })\n .then(function(response) {\n return [DataTransformer.transformSong(response.data[0] || response)];\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u5355\u66f2\u5931\u8d25:', error);\n throw error;\n });\n },\n\n /**\n * \u5bfc\u5165\u6b4c\u5355\u4f5c\u54c1\n * @param {string} urlLike - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216ID\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n importMusicSheet: function(urlLike) {\n function getPlaylistId(str) {\n if (/^\\d+$/.test(str)) return str;\n var match = str.match(/\\b(\\d{8,12})\\b/);\n if (match) return match[1];\n if (str.includes('?')) {\n var urlParams = new URLSearchParams(str.split('?')[1]);\n return urlParams.get('id');\n }\n \n return null;\n }\n \n return Promise.resolve().then(function() {\n var playlistId = getPlaylistId(urlLike);\n if (playlistId) return playlistId;\n return axios.get(urlLike, {\n maxRedirects: 5,\n timeout: 3000\n })\n .then(function(response) {\n var finalUrl = response.request.res.responseUrl || response.config.url;\n return getPlaylistId(finalUrl);\n })\n .then(function(foundId) {\n if (!foundId) throw new Error('\u65e0\u6cd5\u63d0\u53d6\u6b4c\u5355ID');\n return foundId;\n });\n })\n .then(function(playlistId) {\n return ApiService.request('songlist.get_songlist', { songlist_id: playlistId });\n })\n .then(function(response) {\n var musicList = (response.data || []).map(DataTransformer.transformSong);\n return musicList;\n })\n .catch(function(error) {\n console.error('\u5bfc\u5165\u6b4c\u5355\u5931\u8d25:', error);\n throw error;\n });\n },\n \n /**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @param {Object} musicItem - \u97f3\u4e50\u9879\n * @param {number} page - \u9875\u7801\n * @param {number} pagesize - \u6bcf\u9875\u6570\u91cf\n * @returns {Promise} Promise\u5bf9\u8c61\n */\n getMusicComments: function(musicItem, page, pagesize) {\n page = page || 1;\n pagesize = pagesize || 10;\n \n return ApiService.request('comment.get_hot_comments', {\n biz_id: musicItem.id,\n page_num: page,\n page_size: pagesize\n }).then(function(response) {\n var totalPages = Math.ceil(response.data.TotalCmNum / pagesize);\n var isEnd = page >= totalPages;\n \n var data = (response.data.CommentList.Comments || []).map(function(comment) {\n return {\n id: comment.SeqNo || '',\n avatar: comment.Avatar || '',\n nickName: comment.Nick || '\u533f\u540d\u7528\u6237',\n comment: comment.Content || '',\n like: comment.PraiseNum || 0,\n createAt: comment.PubTime ? new Date(comment.PubTime * 1000).toLocaleString() : ''\n };\n });\n \n return { isEnd: isEnd, data: data };\n });\n }\n};\n\n/**\n * \u79cb\u79cb\u97f3\u4e50\u63d2\u4ef6\u6a21\u5757\n * \u7248\u672c 2.1.0\n */\nmodule.exports = {\n // \u57fa\u7840\u4fe1\u606f\n author: CONFIG.author,\n platform: CONFIG.platform,\n version: CONFIG.version,\n srcUrl: CONFIG.srcUrl,\n \n // \u914d\u7f6e\n primaryKey: CONFIG.primaryKey,\n cacheControl: CONFIG.cacheControl,\n hints: CONFIG.hints,\n userVariables: CONFIG.userVariables,\n supportedSearchType: CONFIG.supportedSearchType,\n \n // \u6838\u5fc3\u65b9\u6cd5\n search: Service.search,\n getLyric: Service.getLyric,\n getMediaSource: Service.getMediaSource,\n getAlbumInfo: Service.getAlbumInfo,\n getArtistWorks: Service.getArtistWorks,\n getMusicSheetInfo: Service.getMusicSheetInfo,\n importMusicItem: Service.importMusicItem,\n importMusicSheet: Service.importMusicSheet,\n getMusicComments: Service.getMusicComments\n};", "id": "msg_1789568434832"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:34] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ Vip, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:35] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568434832: True [2026-09-16 22:20:35] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ Vip [2026-09-16 22:20:35] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:35] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:35] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "CCTV\u542c\u97f3", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst searchRows = 20;\nconst host=\"https://tv.cctv.com/ty/m/sxy/index.shtml\";\n\n\n\n\n\n\n\nasync function getMediaSource(musicItem, quality) {\n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n const html2 = await axios_1.get(\"https://vdn.apps.cntv.cn/api/getIpadVideoInfo.do?pid=\"+musicItem.guid,headers2); \n const obj=html2.data;\n const urlc=obj.match(/var html5VideoData = '(.*?)';getHtml5VideoData/)[1];\n const myobj=eval('(' + urlc + ')')\n const myurl=myobj.manifest.hls_audio_url;\n \n \n \n \n \n \n return {\n \n url:myurl,\n\n };\n \n \n}\n\n async function getMusicInfo(musicItem) {\n // \u6839\u636e\u97f3\u4e50\u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n var songkey=musicItem.id.match(/\\/song\\/(.*?).html/)[1] \n \n const headers2 = {\n \"Accept\":\"application/json, text/javascript, */*; q=0.01\",\n \"Accept-Encoding\":\"gzip, deflate\",\n \"Accept-Language\":\"zh-CN,zh;q=0.9\",\n \"User-Agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1\",\n \"X-Requested-With\":\"XMLHttpRequest\",\n }; \n \n \n \n // const html2 = await axios_1.get(\"http://tv.zanlagua.com/2T58.php?songkey=\"+songkey,headers2); \n // const obj=html2.data; \n \n \n return {\n artwork: obj[\"pic\"],\n title:obj[\"title\"].split('-')[1],\n artist:obj[\"title\"].split('-')[0],\n };\n }\n\nasync function getRecommendSheetTags() {\n const headers = {\n };\n const params = {\n\n };\n \n const html = await axios_1.get(\"https://tv.cctv.com/ty/m/sxy/data.jsonp?cb=fenlei\", { headers, params });\n const obj=html.data; \n const mydata=JSON.parse(obj.match(/fenlei\\((.*?)\\)/)[1]).data.list;\n\n /*\n const $ = (0, cheerio_1.load)(obj); \n const rawAlbums2 = $(\"div.ilingku_fl\");\n const albums2 = []; \n console.log(rawAlbums2.length);\n */\n var arr1=[]; \n var arr2=[];\n for(let i=0;i $71db8672df30ab6c$export$5e032988b71f6158);\n$parcel$export(module.exports, \"headers\", () => $71db8672df30ab6c$export$838e2a576d4d6ff6);\n$parcel$export(module.exports, \"formatAlbumFromHtml\", () => $71db8672df30ab6c$export$ca076635ed710b0d);\n$parcel$export(module.exports, \"search\", () => $71db8672df30ab6c$export$d76128d007d19019);\n$parcel$export(module.exports, \"default\", () => $71db8672df30ab6c$export$2e2bcd8739ae039);\n\n\nconst $71db8672df30ab6c$export$5e032988b71f6158 = \"https://www.shuyinfm.com\";\nconst $71db8672df30ab6c$export$838e2a576d4d6ff6 = {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.69\"\n};\nasync function $71db8672df30ab6c$var$getRecommendSheetTags() {\n try {\n var result = {};\n var datas = [];\n var pinned = [];\n datas.push({\n data: [\n {\n id: \"1\",\n title: \"\u8a00\u60c5\"\n },\n {\n id: \"2\",\n title: \"\u7384\u5e7b\"\n },\n {\n id: \"5\",\n title: \"\u6050\u6016\"\n },\n {\n id: \"7\",\n title: \"\u7a7f\u8d8a\"\n },\n {\n id: \"8\",\n title: \"\u90fd\u5e02\"\n },\n {\n id: \"16\",\n title: \"\u5386\u53f2\"\n },\n {\n id: \"33\",\n title: \"\u60ac\u7591\"\n },\n {\n id: \"36\",\n title: \"\u7a7f\u8d8a\"\n },\n {\n id: \"38\",\n title: \"\u6587\u5b66\"\n },\n {\n id: \"39\",\n title: \"\u63a8\u7406\"\n },\n {\n id: \"40\",\n title: \"\u519b\u4e8b\"\n },\n {\n id: \"41\",\n title: \"\u804c\u573a\u8a00\u60c5\"\n },\n {\n id: \"56\",\n title: \"\u53cd\u8150\"\n },\n {\n id: \"58\",\n title: \"\u4eba\u7269\"\n },\n {\n id: \"60\",\n title: \"\u4fee\u771f\"\n },\n {\n id: \"63\",\n title: \"\u7f51\u6e38\"\n },\n {\n id: \"92\",\n title: \"\u6b66\u4fa0\"\n }\n ],\n title: \"\u6709\u58f0\u5c0f\u8bf4\"\n });\n pinned = [].concat(datas[0].data);\n datas.push({\n data: [\n {\n id: \"10\",\n title: \"\u803d\u7f8e\u5267\"\n },\n {\n id: \"12\",\n title: \"\u7231\u60c5\u5267\"\n },\n {\n id: \"51\",\n title: \"\u53e4\u98ce\u5267\"\n },\n {\n id: \"54\",\n title: \"\u73b0\u4ee3\u5267\"\n }\n ],\n title: \"\u5e7f\u64ad\u5267\"\n });\n datas.push({\n data: [\n {\n id: \"42\",\n title: \"\u5355\u7530\u82b3\"\n },\n {\n id: \"43\",\n title: \"\u5218\u5170\u82b3\"\n },\n {\n id: \"44\",\n title: \"\u7530\u8fde\u5143\"\n },\n {\n id: \"45\",\n title: \"\u8881\u9614\u6210\"\n },\n {\n id: \"46\",\n title: \"\u8fde\u4e3d\u5982\"\n },\n {\n id: \"47\",\n title: \"\u5f20\u5c11\u4f50\"\n },\n {\n id: \"48\",\n title: \"\u7530\u6218\u4e49\"\n },\n {\n id: \"49\",\n title: \"\u5b59\u4e00\"\n },\n {\n id: \"50\",\n title: \"\u5176\u4ed6\"\n },\n {\n id: \"53\",\n title: \"\u8881\u7530\"\n },\n {\n id: \"55\",\n title: \"\u738b\u73a5\u6ce2\"\n },\n {\n id: \"57\",\n title: \"\u90ed\u5fb7\u7eb2\"\n },\n {\n id: \"62\",\n title: \"\u5173\u52c7\u8d85\"\n },\n {\n id: \"65\",\n title: \"\u738b\u4f20\u6797\"\n }\n ],\n title: \"\u8bc4\u4e66\"\n });\n datas.push({\n data: [\n {\n id: \"67\",\n title: \"\u8d44\u8baf\"\n },\n {\n id: \"68\",\n title: \"\u77ed\u5267\"\n },\n {\n id: \"69\",\n title: \"\u5a31\u4e50\"\n },\n {\n id: \"70\",\n title: \"\u97f3\u4e50\"\n },\n {\n id: \"71\",\n title: \"\u60c5\u611f\"\n },\n {\n id: \"72\",\n title: \"\u641e\u7b11\"\n },\n {\n id: \"73\",\n title: \"\u76f8\u58f0\u5c0f\u54c1\"\n },\n {\n id: \"74\",\n title: \"\u6c7d\u8f66\"\n },\n {\n id: \"75\",\n title: \"\u516c\u5f00\u8bfe\"\n },\n {\n id: \"76\",\n title: \"\u751f\u6d3b\"\n },\n {\n id: \"77\",\n title: \"\u65c5\u6e38\"\n }\n ],\n title: \"\u8f66\u8f7d\"\n });\n datas.push({\n data: [\n {\n id: \"31\",\n title: \"\u767e\u5bb6\u8bb2\u575b\"\n },\n {\n id: \"35\",\n title: \"\u5a31\u4e50\"\n },\n {\n id: \"59\",\n title: \"\u7ca4\u8bed\"\n },\n {\n id: \"98\",\n title: \"\u97f3\u4e50\"\n },\n {\n id: \"99\",\n title: \"\u53e4\u98ce\"\n }\n ],\n title: \"\u5176\u5b83\"\n });\n /*const html = (await axios.get(host, {headers: headers})).data\n const $ = cheerio.load(html);\n var tagList = $(\"ul.layui-nav\").find(\"li\");\n for (let i = 0; i < tagList.length; i++) {\n const name = $(tagList[i]).find(\"a\").text();\n const href = $(tagList[i]).find(\"a\").attr(\"href\");\n if (href == \"/\") continue\n var temp = {} as IMusic.IMusicSheetGroupItem;\n temp.title = name;\n temp.data = [];\n if (href.match(/\\/\\w+\\//)) {\n const group = (await axios.get(host + href, {headers: headers})).data\n const group$ = cheerio.load(group);\n var secondTagList = group$(\"dd.clearfix\").find(\"a\")\n for (let j = 0; j < secondTagList.length; i++) {\n var itemSecond = {\n id: $(secondTagList[j]).attr(\"href\"),\n title: $(secondTagList[j]).text(),\n } as IMusic.IMusicSheetItem\n temp.data.push(itemSecond)\n if (name === \"\u6709\u58f0\u5c0f\u8bf4\") {\n pinned.push(itemSecond)\n }\n }\n } else {\n temp.data = [{\n id: href,\n title: name\n } as IMusic.IMusicSheetItem]\n }\n datas.push(temp);\n }*/ result.data = datas;\n result.pinned = pinned;\n return result;\n } catch (e) {}\n return {};\n}\nasync function $71db8672df30ab6c$var$getRecommendSheetsByTag(tag, page) {\n try {\n var result = {};\n var sheets = [];\n var id = tag.id;\n if (id == \"\") id = \"1\";\n var searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + \"/listinfo-\" + id + \"-\" + (page - 1) + \".html\";\n const html = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(searchUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6,\n timeout: 5000\n })).data;\n sheets = $71db8672df30ab6c$export$ca076635ed710b0d(html);\n result.data = sheets;\n result.isEnd = sheets.length > 0 && sheets.length < 24;\n return result;\n } catch (e) {}\n return {};\n}\nasync function $71db8672df30ab6c$var$getMusicSheetInfo(albumItem, page) {\n var result = {\n sheetItem: {},\n musicList: []\n };\n let ret = await $71db8672df30ab6c$var$getAlbumInfo(albumItem, page);\n result.sheetItem = ret.albumItem;\n result.musicList = ret.musicList;\n return result;\n}\nasync function $71db8672df30ab6c$var$getAlbumInfo(albumItem, page) {\n var result = {\n albumItem: {\n ...albumItem\n },\n musicList: []\n };\n var searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + albumItem.id;\n let searchRes = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(searchUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n const $ = $1Qt5Z$cheerio.load(searchRes);\n result.albumItem.description = $(\"#book_intro\").find(\"dd\").text();\n const artist = $(\"p.sub-tags\").find(\"a\").text();\n const fansList = $(\"#fansinfo\").find(\"li\");\n for(let i = 0; i < fansList.length; i++){\n const title = $(fansList[i]).find(\"a\").text();\n const href = $(fansList[i]).find(\"a\").attr(\"href\");\n result.musicList.push({\n id: href,\n title: title,\n artist: artist\n });\n }\n return result;\n}\nasync function $71db8672df30ab6c$var$getMediaSource(musicItem, quality) {\n const searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + musicItem.id;\n const html = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(searchUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n const $ = $1Qt5Z$cheerio.load(html);\n const code = $(\"#jp-lines\").find(\"li\").eq(0).attr(\"data-code\");\n const path = html.match(/url : '(.*?)'/)[1];\n const tempUrl = $71db8672df30ab6c$export$5e032988b71f6158 + path + code;\n const res = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(tempUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n try {\n const res2 = await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(res.url, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n });\n return {\n url: res2.request.responseURL\n };\n } catch (e) {\n return {\n url: e.request.responseURL\n };\n }\n return {\n url: \"\"\n };\n}\nasync function $71db8672df30ab6c$export$d76128d007d19019(query, page, type) {\n if (type === \"album\") return $71db8672df30ab6c$var$searchAlbum(query, page);\n else if (type === \"sheet\") return $71db8672df30ab6c$var$searchAlbum(query, page);\n}\nasync function $71db8672df30ab6c$var$searchAlbum(query, page) {\n try {\n let keyword = encodeURIComponent(query);\n var searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + \"/e/search/index.php\";\n const html = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).post(searchUrl, \"keyboard=\" + keyword + \"&show=\" + encodeURIComponent(\"title,newstext,player,playadmin,movietime,filetype\"), {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n const sheets = $71db8672df30ab6c$export$ca076635ed710b0d(html);\n return {\n isEnd: true,\n data: sheets\n };\n } catch (e) {}\n return {\n isEnd: true,\n data: []\n };\n}\nfunction $71db8672df30ab6c$export$ca076635ed710b0d(html) {\n var sheets = [];\n const $ = $1Qt5Z$cheerio.load(html);\n const albumList = $(\"ul.qm-pic-txt\").find(\"li\");\n for(let i = 0; i < albumList.length; i++){\n const id = $(albumList[i]).find(\".txt a\").attr(\"href\");\n const title = $(albumList[i]).find(\".txt a\").text();\n const artwork = $(albumList[i]).find(\".pic a img\").attr(\"src\");\n sheets.push({\n id: id,\n title: title,\n artwork: artwork\n });\n }\n return sheets;\n}\nconst $71db8672df30ab6c$var$pluginInstance = {\n platform: \"\u4e66\u97f3FM\",\n version: \"0.3.6\",\n author: \"SoEasy\u540c\u5b66\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/shuyinfm.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\n \"album\",\n \"sheet\"\n ],\n search: $71db8672df30ab6c$export$d76128d007d19019,\n getAlbumInfo: $71db8672df30ab6c$var$getAlbumInfo,\n getMusicSheetInfo: $71db8672df30ab6c$var$getMusicSheetInfo,\n getMediaSource: $71db8672df30ab6c$var$getMediaSource,\n getRecommendSheetTags: $71db8672df30ab6c$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $71db8672df30ab6c$var$getRecommendSheetsByTag\n};\nvar /*getRecommendSheetTags().then((res) => {\n console.log(res)\n getRecommendSheetsByTag(res.pinned[0], 1).then((res) => {\n console.log(res)\n getAlbumInfo(res.data[1], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n })\n })\n})*/ /*search(\"\u4e0e\u864e\u8c0b\u5a5a\", 1, \"album\").then((res) => {\n console.log(res)\n getMusicSheetInfo(res.data[0], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n })\n})*/ $71db8672df30ab6c$export$2e2bcd8739ae039 = $71db8672df30ab6c$var$pluginInstance;\n\n\n//# sourceMappingURL=shuyinfm.js.map", "id": "msg_1789568439207"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 书音FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568439207: True [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 书音FM [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KG [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5143\u529bKG", "code": "var _0xodt='jsjiami.com.v7';'use strict';function _0x4c5c(_0x35ae5b,_0x272ded){const _0x405aff=_0x405a();return _0x4c5c=function(_0x4c5c1,_0x52185e){_0x4c5c1=_0x4c5c1-0xff;let _0xb77ed9=_0x405aff[_0x4c5c1];if(_0x4c5c['iXwkMI']===undefined){var _0x278508=function(_0xc2e857){const _0x125938='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x113517='',_0x44a07e='';for(let _0x345730=0x0,_0xf2f84a,_0x28ed1d,_0x2dd6c5=0x0;_0x28ed1d=_0xc2e857['charAt'](_0x2dd6c5++);~_0x28ed1d&&(_0xf2f84a=_0x345730%0x4?_0xf2f84a*0x40+_0x28ed1d:_0x28ed1d,_0x345730++%0x4)?_0x113517+=String['fromCharCode'](0xff&_0xf2f84a>>(-0x2*_0x345730&0x6)):0x0){_0x28ed1d=_0x125938['indexOf'](_0x28ed1d);}for(let _0x1befb0=0x0,_0x2de6ee=_0x113517['length'];_0x1befb0<_0x2de6ee;_0x1befb0++){_0x44a07e+='%'+('00'+_0x113517['charCodeAt'](_0x1befb0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x44a07e);};const _0x46f5e4=function(_0x5420a4,_0x5e2bb8){let _0x1df875=[],_0x180af1=0x0,_0x517459,_0x503878='';_0x5420a4=_0x278508(_0x5420a4);let _0x1c0db9;for(_0x1c0db9=0x0;_0x1c0db9<0x100;_0x1c0db9++){_0x1df875[_0x1c0db9]=_0x1c0db9;}for(_0x1c0db9=0x0;_0x1c0db9<0x100;_0x1c0db9++){_0x180af1=(_0x180af1+_0x1df875[_0x1c0db9]+_0x5e2bb8['charCodeAt'](_0x1c0db9%_0x5e2bb8['length']))%0x100,_0x517459=_0x1df875[_0x1c0db9],_0x1df875[_0x1c0db9]=_0x1df875[_0x180af1],_0x1df875[_0x180af1]=_0x517459;}_0x1c0db9=0x0,_0x180af1=0x0;for(let _0xc17872=0x0;_0xc17872<_0x5420a4['length'];_0xc17872++){_0x1c0db9=(_0x1c0db9+0x1)%0x100,_0x180af1=(_0x180af1+_0x1df875[_0x1c0db9])%0x100,_0x517459=_0x1df875[_0x1c0db9],_0x1df875[_0x1c0db9]=_0x1df875[_0x180af1],_0x1df875[_0x180af1]=_0x517459,_0x503878+=String['fromCharCode'](_0x5420a4['charCodeAt'](_0xc17872)^_0x1df875[(_0x1df875[_0x1c0db9]+_0x1df875[_0x180af1])%0x100]);}return _0x503878;};_0x4c5c['DbASML']=_0x46f5e4,_0x35ae5b=arguments,_0x4c5c['iXwkMI']=!![];}const _0x92732d=_0x405aff[0x0],_0x3d6294=_0x4c5c1+_0x92732d,_0x277cea=_0x35ae5b[_0x3d6294];return!_0x277cea?(_0x4c5c['MXYpJC']===undefined&&(_0x4c5c['MXYpJC']=!![]),_0xb77ed9=_0x4c5c['DbASML'](_0xb77ed9,_0x52185e),_0x35ae5b[_0x3d6294]=_0xb77ed9):_0xb77ed9=_0x277cea,_0xb77ed9;},_0x4c5c(_0x35ae5b,_0x272ded);}const _0x202c5b=_0x4c5c;(function(_0x418052,_0x15b9dc,_0x1dc1d9,_0x582008,_0x2b2161,_0x1c5381,_0x37c5fd){return _0x418052=_0x418052>>0x9,_0x1c5381='hs',_0x37c5fd='hs',function(_0xe17a37,_0x5f240d,_0x556627,_0x1d7270,_0xe55cf6){const _0x255666=_0x4c5c;_0x1d7270='tfi',_0x1c5381=_0x1d7270+_0x1c5381,_0xe55cf6='up',_0x37c5fd+=_0xe55cf6,_0x1c5381=_0x556627(_0x1c5381),_0x37c5fd=_0x556627(_0x37c5fd),_0x556627=0x0;const _0x5e9186=_0xe17a37();while(!![]&&--_0x582008+_0x5f240d){try{_0x1d7270=-parseInt(_0x255666(0x167,'cCSu'))/0x1+parseInt(_0x255666(0x270,'2$Dj'))/0x2+-parseInt(_0x255666(0x230,'OaSf'))/0x3+parseInt(_0x255666(0x14f,'S7N@'))/0x4*(-parseInt(_0x255666(0x1e1,'^!ZC'))/0x5)+parseInt(_0x255666(0x106,'RWq!'))/0x6*(-parseInt(_0x255666(0x189,'!hM*'))/0x7)+parseInt(_0x255666(0x124,'FrC3'))/0x8+parseInt(_0x255666(0x24d,'d0va'))/0x9*(parseInt(_0x255666(0x26d,'cCSu'))/0xa);}catch(_0x1d6b96){_0x1d7270=_0x556627;}finally{_0xe55cf6=_0x5e9186[_0x1c5381]();if(_0x418052<=_0x582008)_0x556627?_0x2b2161?_0x1d7270=_0xe55cf6:_0x2b2161=_0xe55cf6:_0x556627=_0xe55cf6;else{if(_0x556627==_0x2b2161['replace'](/[FGxXtfpdOLHwDQykqJYC=]/g,'')){if(_0x1d7270===_0x5f240d){_0x5e9186['un'+_0x1c5381](_0xe55cf6);break;}_0x5e9186[_0x37c5fd](_0xe55cf6);}}}}}(_0x1dc1d9,_0x15b9dc,function(_0x5422f8,_0x319955,_0x4c8148,_0x50e861,_0x17b90e,_0x21ddec,_0xcbce49){return _0x319955='\\x73\\x70\\x6c\\x69\\x74',_0x5422f8=arguments[0x0],_0x5422f8=_0x5422f8[_0x319955](''),_0x4c8148='\\x72\\x65\\x76\\x65\\x72\\x73\\x65',_0x5422f8=_0x5422f8[_0x4c8148]('\\x76'),_0x50e861='\\x6a\\x6f\\x69\\x6e',(0x1c839b,_0x5422f8[_0x50e861](''));});}(0x18c00,0x2f414,_0x405a,0xc8),_0x405a)&&(_0xodt=0x1662);Object[_0x202c5b(0x1a9,'uM&7')](exports,'__esModule',{'value':!![]});const axios_1=require(_0x202c5b(0x204,'kZE5')),cheerio_1=require(_0x202c5b(0x143,'(zvE')),CryptoJs=require(_0x202c5b(0x22a,'7Vt6')),he=require('he'),pageSize=0x14;function formatMusicItem(_0x5002c8){const _0x5ec221=_0x202c5b,_0x15b046={'texbN':function(_0x488407,_0x5e92fa){return _0x488407!==_0x5e92fa;},'BsEpt':function(_0x2d6cd4,_0x40e612){return _0x2d6cd4!==_0x40e612;},'cxnLT':function(_0x342dbf,_0x26a240){return _0x342dbf!==_0x26a240;},'hTNJE':'{size}','YQsIF':'1080','ukAAr':function(_0x51466f,_0x341df4){return _0x51466f!==_0x341df4;},'qNrVV':function(_0x547f22,_0x1d97bf){return _0x547f22!==_0x1d97bf;},'lEbaG':function(_0x1ba068,_0x322d0b){return _0x1ba068!==_0x322d0b;}};var _0x30cc11,_0x421df4,_0xffebeb,_0x3a2f8c,_0x3845e4,_0x2b98f,_0x20d47f,_0x5a6943,_0x29c4b7;return{'id':_0x15b046[_0x5ec221(0x21e,'z*BR')](_0x3a2f8c=_0x5002c8[_0x5ec221(0x182,'8p6M')],null)&&_0x15b046['BsEpt'](_0x3a2f8c,void 0x0)?_0x3a2f8c:_0x5002c8['Grp'][0x0]['FileHash'],'title':_0x15b046[_0x5ec221(0x232,'y@Gu')](_0x30cc11=_0x5002c8['SongName'],null)&&_0x30cc11!==void 0x0?_0x30cc11:_0x5002c8[_0x5ec221(0x114,'oe@V')],'artist':(_0x421df4=_0x5002c8[_0x5ec221(0x261,'HYwy')])!==null&&_0x15b046['texbN'](_0x421df4,void 0x0)?_0x421df4:_0x5002c8[_0x5ec221(0x163,'$XKC')][0x0][_0x5ec221(0x1be,'8p6M')],'album':_0x15b046[_0x5ec221(0x12d,'^!ZC')](_0xffebeb=_0x5002c8[_0x5ec221(0x1eb,'*v#r')],null)&&_0x15b046[_0x5ec221(0x1bc,'j)(F')](_0xffebeb,void 0x0)?_0xffebeb:_0x5002c8['Grp'][0x0]['AlbumName'],'album_id':_0x15b046['BsEpt'](_0x3845e4=_0x5002c8[_0x5ec221(0x1f5,'z*BR')],null)&&_0x15b046[_0x5ec221(0x1af,'2$Dj')](_0x3845e4,void 0x0)?_0x3845e4:_0x5002c8[_0x5ec221(0x1ca,'!w7^')][0x0][_0x5ec221(0x226,'5#]K')],'album_audio_id':0x0,'duration':_0x5002c8[_0x5ec221(0x25f,'kZE5')],'artwork':(_0x15b046['cxnLT'](_0x2b98f=_0x5002c8['Image'],null)&&_0x2b98f!==void 0x0?_0x2b98f:_0x5002c8[_0x5ec221(0x145,'HYwy')][0x0][_0x5ec221(0x24a,'zcg)')])['replace'](_0x15b046[_0x5ec221(0x1ec,'r%er')],_0x15b046['YQsIF']),'320hash':_0x15b046['texbN'](_0x29c4b7=_0x5002c8[_0x5ec221(0x23e,'OUiY')],null)&&_0x29c4b7!==void 0x0?_0x29c4b7:undefined,'sqhash':_0x15b046[_0x5ec221(0x13a,'^!ZC')](_0x20d47f=_0x5002c8['SQFileHash'],null)&&_0x15b046['ukAAr'](_0x20d47f,void 0x0)?_0x20d47f:undefined,'ResFileHash':_0x15b046[_0x5ec221(0x25b,'j)(F')](_0x5a6943=_0x5002c8['ResFileHash'],null)&&_0x15b046['lEbaG'](_0x5a6943,void 0x0)?_0x5a6943:undefined};}function formatMusicItem2(_0x8e7500){const _0x2f810c=_0x202c5b,_0x56ec1f={'YQxMd':function(_0x532964,_0x3a3f26){return _0x532964!==_0x3a3f26;},'GNyKJ':function(_0x3ab4c3,_0xc41766){return _0x3ab4c3===_0xc41766;},'wdrTv':function(_0x116f02,_0x3d1565){return _0x116f02!==_0x3d1565;},'zNzpc':function(_0x1c037d,_0x16353b){return _0x1c037d!==_0x16353b;},'zocmT':function(_0x248702,_0x24691e){return _0x248702===_0x24691e;},'sGaHS':function(_0x31d164,_0xa637fa){return _0x31d164===_0xa637fa;},'hLQnL':function(_0x29a58d,_0x41aa31){return _0x29a58d===_0x41aa31;},'qpRfx':function(_0x513363,_0x2d5c4b){return _0x513363===_0x2d5c4b;},'lJrLR':function(_0x1e2330,_0x5bb234){return _0x1e2330!==_0x5bb234;},'PmxBd':_0x2f810c(0x19e,'^!ZC'),'jbZWX':'400'};var _0x2b7da0,_0xe00d3b,_0x28c24d,_0x2eb017,_0x364b07,_0x260b2b,_0x3d326a;return{'id':_0x8e7500['hash'],'title':_0x8e7500[_0x2f810c(0x1e2,'oe@V')],'artist':_0x56ec1f[_0x2f810c(0x166,'OUiY')](_0x2b7da0=_0x8e7500['singername'],null)&&_0x56ec1f[_0x2f810c(0x185,'RWq!')](_0x2b7da0,void 0x0)?_0x2b7da0:((_0x28c24d=_0x56ec1f[_0x2f810c(0x141,'cCSu')](_0xe00d3b=_0x8e7500[_0x2f810c(0x22b,'2$Dj')],null)||_0xe00d3b===void 0x0?void 0x0:_0xe00d3b[_0x2f810c(0x1ab,'gTPO')](_0x4a2bec=>{const _0x7f6d1a=_0x2f810c;var _0x23c971;return _0x56ec1f['YQxMd'](_0x23c971=_0x56ec1f['GNyKJ'](_0x4a2bec,null)||_0x56ec1f[_0x7f6d1a(0x22f,'OaSf')](_0x4a2bec,void 0x0)?void 0x0:_0x4a2bec[_0x7f6d1a(0x23b,'kZE5')],null)&&_0x56ec1f['wdrTv'](_0x23c971,void 0x0)?_0x23c971:'';}))===null||_0x56ec1f[_0x2f810c(0x152,'OUiY')](_0x28c24d,void 0x0)?void 0x0:_0x28c24d[_0x2f810c(0x102,'osUn')](',\\x20'))||((_0x260b2b=_0x56ec1f[_0x2f810c(0x241,'iUNf')](_0x364b07=_0x56ec1f['hLQnL'](_0x2eb017=_0x8e7500['filename'],null)||_0x56ec1f[_0x2f810c(0x19d,'j)(F')](_0x2eb017,void 0x0)?void 0x0:_0x2eb017['split']('-'),null)||_0x364b07===void 0x0?void 0x0:_0x364b07[0x0])===null||_0x260b2b===void 0x0?void 0x0:_0x260b2b['trim']()),'album':_0x56ec1f[_0x2f810c(0x107,'aE0w')](_0x3d326a=_0x8e7500['album_name'],null)&&_0x3d326a!==void 0x0?_0x3d326a:_0x8e7500['remark'],'album_id':_0x8e7500[_0x2f810c(0x17c,'j)(F')],'album_audio_id':_0x8e7500[_0x2f810c(0x179,'K$GR')],'artwork':_0x8e7500[_0x2f810c(0x227,'^!ZC')]?_0x8e7500[_0x2f810c(0x22c,'cCSu')][_0x2f810c(0x23a,'S7N@')](_0x56ec1f[_0x2f810c(0x138,'uXm3')],_0x56ec1f[_0x2f810c(0x1a2,'iUNf')]):undefined,'duration':_0x8e7500[_0x2f810c(0x1ea,'*v#r')],'320hash':_0x8e7500['320hash'],'sqhash':_0x8e7500['sqhash'],'origin_hash':_0x8e7500['origin_hash']};}function formatImportMusicItem(_0x145a1e){const _0x10e43f=_0x202c5b,_0x19d8d9={'JiAHC':function(_0x1fdca2,_0x5593ac){return _0x1fdca2!==_0x5593ac;},'bfogm':function(_0x43272d,_0x58749c){return _0x43272d!==_0x58749c;},'fpquX':function(_0x315609,_0x1545e0){return _0x315609!==_0x1545e0;},'KSFdK':function(_0x469a81,_0x12e820){return _0x469a81===_0x12e820;},'ysbgC':function(_0x50bf33,_0x378c34){return _0x50bf33!==_0x378c34;},'sLReo':function(_0xe867fd,_0x22342a){return _0xe867fd&&_0x22342a;},'OXgeE':function(_0x4038ad,_0x3c0a60){return _0x4038ad!==_0x3c0a60;},'ICpuV':_0x10e43f(0x228,'HYwy'),'iPkpx':function(_0x270946,_0x54f5bf){return _0x270946===_0x54f5bf;},'FhvjX':function(_0x10d16f,_0x4cfe09){return _0x10d16f+_0x4cfe09;},'xytaK':function(_0x166e76,_0x1e67f3){return _0x166e76!==_0x1e67f3;},'LfWon':function(_0x412a0e,_0x277b83){return _0x412a0e===_0x277b83;},'lgtvI':function(_0x1b5716,_0x136521){return _0x1b5716===_0x136521;},'WvOwc':function(_0x81bd4,_0x491cbb){return _0x81bd4===_0x491cbb;},'vxBRv':function(_0x3630d9,_0x180181){return _0x3630d9===_0x180181;},'ewbhi':function(_0x948c43,_0x37a678){return _0x948c43===_0x37a678;}};var _0x29ba59,_0x140e65,_0x426ece,_0x5e1178,_0x34f763,_0x3c02e5,_0xae2b51;let _0x1a8735=_0x145a1e[_0x10e43f(0x1db,'X2Y*')];const _0x4486ca=_0x145a1e[_0x10e43f(0x1ad,'kZE5')];if(_0x19d8d9[_0x10e43f(0x17a,'gTPO')](_0x4486ca,_0x1a8735)){if(_0x10e43f(0x237,'^!ZC')!==_0x10e43f(0x266,'^w)k')){var _0x109e8d;const [_0x4cd1c8,_0x4ca4f0]=_0x854d05[_0x10e43f(0x1c8,'*v#r')][_0x10e43f(0x1e4,'8p6M')]('-');return{'id':_0x366564[_0x10e43f(0x1f2,'iUNf')],'title':_0x4ca4f0['trim'](),'artist':_0x4cd1c8[_0x10e43f(0x16d,'HYwy')](),'album':_0x19d8d9['JiAHC'](_0x109e8d=_0x383db1[_0x10e43f(0x220,'Yt(0')],null)&&_0x19d8d9[_0x10e43f(0x172,'zcg)')](_0x109e8d,void 0x0)?_0x109e8d:_0x36d8e8[_0x10e43f(0x110,'2$Dj')],'album_id':_0x11c3a3['album_id'],'album_audio_id':_0x260e89['album_audio_id'],'artwork':_0x4d95e8[_0x10e43f(0x130,'y@Gu')],'320hash':_0x161d09['HQFileHash'],'sqhash':_0x401389[_0x10e43f(0x1bd,'kZE5')],'origin_hash':_0x16858d['id']};}else{const _0x4a7d5a=_0x1a8735['indexOf'](_0x4486ca);if(_0x19d8d9[_0x10e43f(0x1cf,'7Vt6')](_0x4a7d5a,-0x1)){if('VqqPa'!==_0x19d8d9[_0x10e43f(0x1d8,'7fal')]){var _0x29c48d;return _0x19d8d9[_0x10e43f(0x269,'uXm3')](_0x29c48d=_0x19d8d9[_0x10e43f(0x197,'*v#r')](_0xe41857,null)||_0x19d8d9[_0x10e43f(0x123,'uM&7')](_0x153632,void 0x0)?void 0x0:_0x21068d[_0x10e43f(0x1c9,'AYko')],null)&&_0x19d8d9['ysbgC'](_0x29c48d,void 0x0)?_0x29c48d:'';}else _0x1a8735=_0x19d8d9[_0x10e43f(0x1dc,'kZE5')](_0x29ba59=_0x1a8735[_0x10e43f(0x243,'iUNf')](_0x19d8d9['FhvjX'](_0x4a7d5a+_0x4486ca['length'],0x2)),null)||_0x19d8d9['KSFdK'](_0x29ba59,void 0x0)?void 0x0:_0x29ba59[_0x10e43f(0x11f,'gTPO')]();}!_0x1a8735&&(_0x1a8735=_0x4486ca);}}const _0x49babd=_0x145a1e['relate_goods'];return{'id':_0x145a1e[_0x10e43f(0x1d7,'!hM*')],'title':_0x1a8735,'artist':_0x4486ca,'album':_0x19d8d9['bfogm'](_0x140e65=_0x145a1e[_0x10e43f(0x119,'5#]K')],null)&&_0x19d8d9[_0x10e43f(0x20b,'2J8$')](_0x140e65,void 0x0)?_0x140e65:'','album_id':_0x145a1e[_0x10e43f(0x104,'oe@V')],'album_audio_id':_0x145a1e[_0x10e43f(0x173,'aE0w')],'artwork':_0x19d8d9[_0x10e43f(0x26b,'msq2')](_0x5e1178=(_0x426ece=_0x19d8d9[_0x10e43f(0x125,'*v#r')](_0x145a1e,null)||_0x145a1e===void 0x0?void 0x0:_0x145a1e[_0x10e43f(0x1b4,'ZvMu')])===null||_0x19d8d9[_0x10e43f(0x272,'RWq!')](_0x426ece,void 0x0)?void 0x0:_0x426ece[_0x10e43f(0x210,'kZE5')],null)||_0x5e1178===void 0x0?void 0x0:_0x5e1178[_0x10e43f(0x16b,'5#]K')](_0x10e43f(0x25a,'uM&7'),'400'),'320hash':_0x19d8d9['KSFdK'](_0x34f763=_0x19d8d9[_0x10e43f(0x1a8,'FrC3')](_0x49babd,null)||_0x49babd===void 0x0?void 0x0:_0x49babd[0x1],null)||_0x19d8d9[_0x10e43f(0x24f,'7fal')](_0x34f763,void 0x0)?void 0x0:_0x34f763[_0x10e43f(0x26c,'^!ZC')],'sqhash':(_0x3c02e5=_0x19d8d9['lgtvI'](_0x49babd,null)||_0x19d8d9[_0x10e43f(0x10c,'j)(F')](_0x49babd,void 0x0)?void 0x0:_0x49babd[0x2])===null||_0x3c02e5===void 0x0?void 0x0:_0x3c02e5[_0x10e43f(0x279,'RWq!')],'origin_hash':_0x19d8d9['KSFdK'](_0xae2b51=_0x49babd===null||_0x49babd===void 0x0?void 0x0:_0x49babd[0x3],null)||_0x19d8d9['ewbhi'](_0xae2b51,void 0x0)?void 0x0:_0xae2b51['hash']};}const headers={'User-Agent':_0x202c5b(0x1c4,'!w7^'),'Accept':_0x202c5b(0x16f,'d0va'),'Accept-Encoding':'gzip,\\x20deflate','Accept-Language':_0x202c5b(0x1cb,'iUNf')};async function searchMusic(_0x54cde4,_0x310c71){const _0x3fde1c=_0x202c5b,_0x9c4ab5={'VVBQZ':'https://songsearch.kugou.com/song_search_v2','feZwM':'WebFilter','KCvtM':function(_0x4197a2,_0x1b0187){return _0x4197a2>=_0x1b0187;},'aGQMp':function(_0x4ebaa2,_0x4b0e23){return _0x4ebaa2*_0x4b0e23;}},_0x4a9ca5=(await axios_1[_0x3fde1c(0x10d,'aE0w')][_0x3fde1c(0x1ed,'y@Gu')](_0x9c4ab5[_0x3fde1c(0x203,'2$Dj')],{'headers':headers,'params':{'keyword':_0x54cde4,'page':_0x310c71,'pagesize':pageSize,'userid':0x0,'clientver':'','platform':_0x9c4ab5['feZwM'],'filter':0x2,'iscorrection':0x1,'privilege_filter':0x0,'area_code':0x1}}))['data'],_0x3115e9=_0x4a9ca5[_0x3fde1c(0x12f,'7Vt6')][_0x3fde1c(0x1d3,'!hM*')][_0x3fde1c(0x25d,'7Vt6')](formatMusicItem);return{'isEnd':_0x9c4ab5[_0x3fde1c(0x21c,'(zvE')](_0x9c4ab5['aGQMp'](_0x310c71,pageSize),_0x4a9ca5[_0x3fde1c(0x208,'7fal')][_0x3fde1c(0x20e,'*3ba')]),'data':_0x3115e9};}async function searchAlbum(_0x3c2107,_0x28ecaf){const _0x48903a=_0x202c5b,_0x1aa6a1={'JFVnf':function(_0x578535,_0xcd4494){return _0x578535===_0xcd4494;},'LVcKY':_0x48903a(0x1e7,'OUiY'),'tULYq':_0x48903a(0x251,'X2Y*'),'NQVwr':_0x48903a(0x1f3,'OaSf'),'TUveg':function(_0x3f3b20,_0x356283){return _0x3f3b20>=_0x356283;},'AHHUj':function(_0x580697,_0x3fbd87){return _0x580697*_0x3fbd87;}},_0xb93857=(await axios_1[_0x48903a(0x1f0,'OaSf')]['get'](_0x1aa6a1[_0x48903a(0x15b,'z*BR')],{'headers':headers,'params':{'version':0x2394,'iscorrection':0x1,'highlight':'em','plat':0x0,'keyword':_0x3c2107,'pagesize':0x14,'page':_0x28ecaf,'sver':0x2,'with_res_tag':0x0}}))['data'],_0x56b902=_0xb93857[_0x48903a(0x1f9,'K$GR')][_0x48903a(0x180,'8#AH')][_0x48903a(0x12c,'%xII')](_0x285c5d=>{const _0x2a3bb5=_0x48903a;var _0x42f7ae,_0x440cbb;return{'id':_0x285c5d[_0x2a3bb5(0x255,'%xII')],'artwork':_0x1aa6a1['JFVnf'](_0x42f7ae=_0x285c5d[_0x2a3bb5(0x278,'uXm3')],null)||_0x42f7ae===void 0x0?void 0x0:_0x42f7ae[_0x2a3bb5(0x1b1,'r%er')](_0x1aa6a1['LVcKY'],_0x1aa6a1['tULYq']),'artist':_0x285c5d[_0x2a3bb5(0x14b,'CEre')],'title':(0x0,cheerio_1[_0x2a3bb5(0x207,'8p6M')])(_0x285c5d[_0x2a3bb5(0x246,'2^hK')])[_0x2a3bb5(0x20f,'OUiY')](),'description':_0x285c5d[_0x2a3bb5(0x238,'aE0w')],'date':_0x1aa6a1[_0x2a3bb5(0x13f,'%xII')](_0x440cbb=_0x285c5d[_0x2a3bb5(0x23c,'FrC3')],null)||_0x1aa6a1[_0x2a3bb5(0x271,'RWq!')](_0x440cbb,void 0x0)?void 0x0:_0x440cbb[_0x2a3bb5(0x109,'BFsn')](0x0,0xa)};});return{'isEnd':_0x1aa6a1[_0x48903a(0x1b3,'5#]K')](_0x1aa6a1[_0x48903a(0x169,'2^hK')](_0x28ecaf,0x14),_0xb93857['data']['total']),'data':_0x56b902};}async function searchMusicSheet(_0x4bc373,_0x1a0a22){const _0x5e6daa=_0x202c5b,_0x1c7e62={'NJFSh':_0x5e6daa(0x154,'d0va'),'Hcfzz':function(_0xc499f0,_0x3f5ef3){return _0xc499f0>=_0x3f5ef3;},'HsfiP':function(_0x1252ed,_0x44658c){return _0x1252ed*_0x44658c;}},_0x4ad1b4=(await axios_1['default']['get'](_0x5e6daa(0x1fd,'j)(F'),{'headers':headers,'params':{'format':_0x1c7e62[_0x5e6daa(0x260,'K$GR')],'keyword':_0x4bc373,'page':_0x1a0a22,'pagesize':pageSize,'showtype':0x1}}))['data'],_0x5b8acd=_0x4ad1b4['data']['info'][_0x5e6daa(0x1e8,'oe@V')](_0x32a9b7=>({'title':_0x32a9b7['specialname'],'createAt':_0x32a9b7['publishtime'],'description':_0x32a9b7[_0x5e6daa(0x257,'2$Dj')],'artist':_0x32a9b7[_0x5e6daa(0x199,'j)(F')],'coverImg':_0x32a9b7['imgurl'],'gid':_0x32a9b7[_0x5e6daa(0x1d4,'r%er')],'playCount':_0x32a9b7[_0x5e6daa(0x196,'aE0w')],'id':_0x32a9b7['specialid'],'worksNum':_0x32a9b7['songcount']}));return{'isEnd':_0x1c7e62[_0x5e6daa(0x1fe,'(zvE')](_0x1c7e62[_0x5e6daa(0x13b,'z*BR')](_0x1a0a22,pageSize),_0x4ad1b4[_0x5e6daa(0x115,'S7N@')][_0x5e6daa(0x248,'msq2')]),'data':_0x5b8acd};}const qualityLevels={'low':_0x202c5b(0x20d,'2^hK'),'standard':_0x202c5b(0x19c,'K$GR'),'high':_0x202c5b(0x1a7,'AYko'),'super':_0x202c5b(0x18b,'HYwy')};function _0x405a(){const _0x4373bf=(function(){return[_0xodt,'GjLysLtjQqpiYLamDi.tFXcCoHJmCf.kvC7xwLOd==','w1uwgq','smkMW6/dHmkn','W4LygCoGW4ZdLhdcUG','dCo1FINcLeW','jSo1hxBcMq','gapcTCo6','e15VWOf/','WPBcS8orsCoSkv/cQCk1nSomAmk9WPBcUCoTWO3cUffQW43cH0ldSSo7bdNdSZzCWRiswCkHB27cRtTyWQfPWORcSCkjW7hdKmoArSkyWOdcRSkHxSoQDealxK/dQM8zrSomW5BdRmkYW67cMSo3d8krgmoKW4u1W6pcOSkKzLmkh8kpoWhdO34NmCk5WQ3cVSk8W7/cKNitW7LWWPChW6NcJSkaW7ZdTCk2lKqKrmoHW43dHd3dVSkmW71cWPhcTXVdQSoAwSkGiYnzcmkUWR3cPa','aCkCWO/dKG','W5/cU33cVb8','aZmeWQrIj8oPWO4','gCo3WOLUW6W','vwG9WPfof8oNWQjpW5tcHmkJ','W5GFWR7cN8ot','dmo9n8ofomkufa','WQm9W6CuWQO','W7tcH8kpBa','W5PvfCo+W4/dQNpcVSkNmW','WOL2rmoHW6NdLc/dR8knmNSzWO4RW79yW5ldQmoaW4qku8o0WQe','rKP/','sf91wSkKrN/dIrdcJ8o5WPxcRSooo8kPx8kMBJNcSa','WRm5W6Sx','vmkHWOqm','W5qiWQBdIaZcI18','xmkJWOawjxuqECkLW5z4WO8fx8oSW4ZdKCkria','WO3cRdldRJu','bmoHW7a','mCoKaCozW50lW6ldSCoQ','W7hcNmkqWPxcOX8v','WP/cQ8ohtmk7wqpcRCkGnCohAmk9WQRcVSoSWPNcTW0','weG+W48l','whmqWQrB','W5NcL8oEWRtdOq','WQ/dQmkrW4FcNCkSsCo2F8kYW4f0','W6qFW5ToWR4','WP0kW7LskG','W7pcHSkkWONcQqms','WQRcTGRdUae','dgTmWObfWQO','W6lcH8kvzSobWObFfG','rCkiWRavha','W7FcJ8oNW6DN','s1eAda','WRH5lSotywa5','qmk+W7RdI8khW5/dKSknW6tcISkS','z8kWtIVdGSogW7qYW4JcLdy','jCk9WQJdJxnKW67dImoJW6tcKdpcV8kdx8kLWPddLb9IsCo1WP8pmxRcPWFcOgvuWPCMWQf4WQJdGetdLCk4cs4atSknDXFdVHv2W6JdHqRcSSo1WRPYWOVdOXJdKgm1W7PhW5GfW7D6WPu6fSk0WQddGmoLWPBdHfRcSbZcJLRdPWq7eLdcP0ddKCkLC8o1W6tcSqRdPCoEorxcPCobamotWOVdJ8kDfmofrmkQW65MaJicW4ZcMZv9W7/cNG7dPtNdPSoZ','z2eObc7dNY/cKCouua','5yE455oQ5Qw4','W4SoW4r/','emodW6uwAG','WQDCWPxdHZtcMN8L','emoXW6yTtqCzFYO','lSoKBSkBW7tdVCk0W4O','W4S0WOTSbSkJ','W5/cG8ogrbNdPtvNW4C','WQ/dRSkvW4JcNSkOp8o4zCkgW5XcWQ8','gmokWRXmW6u','WPJcRmkaWQFcJG','W5NcI8kAASok','oSoNAd7dIXW','W7BcHCovsbC','Emo9WONdPaayWRVdLG','aSk3WQldIsW','cCkvnCoGha','W50EWRpcT8oJ','aJDH','nKxcGrXWoW5S','f8oTW7aYxa','W4hcImkxD8oy','h8o0jCoCnmkEfq','W7yiWQxdJHlcQ30z','W7NcH8kqWO/cOW','W6eJwGy','c8kaaSowcG','W7H6W6a4WRaz','cCoiAq3cQW','hSoPAr7cNeT1','p8o3ca','W6X8mSozW6G','zCk+W7ZdGSkCW4tdOSkn','CSkOWPDPW78','WOJcTc3dMthcNKdcKxLA','ru5/W64','jSoZamoD','tuPLW6JcV8oY','W5ODW6rpWP0','edhcLmoKW5W','W6mZwqldISkDWOa','hZdcISolW4W','ceLPw8ob','WO7cLCkLWRlcMa','bCo1WQnDW7e','vCkUWPel','W4/dSmkxdSoJmedcNCkRdmoxymkl','tmk2kW','W5/dSmoz','WQJdKmovW4ZdTb8VW4dcJIzy','W7ObWRr4bq','W7SuWQrYka','WPOBW6beeCkj','f8kIzGS','eCkxWPJdTWy','W5m5WO3cUmoDbW','kCkOWQJdNa','b1r/w8oRrG','W5GMWPf+','eSoDuSkaW6S','dbpcOmoZW70wW6K','tt8vW5GuW79YWR8eiSoGWRC','W6urWRFdLq','W5SDW5LZ','W7S5qaa','W5qMWPz3','W6ZcSNdcQWVdI8o2W6S','f8o2iCog','WOrWW5yJvSoStKqzW6zYkG','W7lcQ8oHW5LA','W683WPlcJmoA','amkVEWK+','WPJcTmkiWRdcNM4','wCkUWPyc','dSo+wqNcIW','W7RcHmo1W7r9W5nN','WRKkWR/cJKZcKa','W6VcMSknWOFcQra'].concat((function(){return['W6lcJmkjWPZcVGy','WPFcQSoctmkKAG','l2roWPfB','hmokWRTz','W4lcRhVcJqNdUSo4W4enW5iR','WQ59kSoE','b1DSxmo2','W7NcISoKWQZdKq','gSo9iCoilmkBbq','W7qiWQBdIaZcRhOnta','pbVcKCo/W4e','W7GlWOddUqy','bmkEWPJdLHn7WR0pW7y','zeuPaJFcIfFdGCkvfCkyWRv+tSkXp2ldRePgWQRdRdCJcZCfu8ooWPxdKmkXpIq','tYqtW4uC','cNHlWOy','W67cSNpcRrxdVCo5W7y','W6JcUmoQWRZdUW','WO0oW7vr','W4HAW48MWP4','iSoYhhhcKSkdW7aXW4FcKJLY','fCkYWRyHAW','dbFcSSoZ','WP/cTCortSk5DbS','aCowW6mtDG','k8oxxtlcKu1vnmkXWPa','WQCrWPRcVL4','W4ZcKSoPW7jh','e8o5nW','F8k8WQCtpa','o8o7h8oCW5Si','nSo3dmoi','WOGDW7vhc8kiW5W','vCk7WPytoXbmp8k4W5zUWOyxyCo2WO3dJmkbnwddH8o7WQbkxSo5WRDaDZ8BuSkEW4HMW4raW4tcI8oUsNtcQCkaW7/cMCo7WPPIWQ/dPJFcPq1VW6NcUgNdHmorW6NdLwrUl0ddS8ogWObRt8kTW5TnqtBcLspcHHWFk8kMWRJdI34wW5z8mNZcVJT4WOdcUComWRdcQCoHWPzVamoZW5FdV3pdIcJdRvBdMCoKgK3dVmkshSkvW71cWQ5odapcLSooWQaKCaRcKs7dJmoKW4DUmCkDW7NdVmoKcJKwWP94vCkQe2pdImkLp8oBW6DbdCk7bmkfW5u+ACoiWQZdOhZcNWGzwCkNjLpdJmkCWRZdIvGgxI0MkSoHi8koW5Kbdmk9W4NcSSkDW7ZdUSopW5WscmofWOhcKbz4dqGLjSoLW59Lh8k7ymk0bCo7oCobWRi','ggvqWQ5nWQ1P','hmkHWQxdHc4','h3LrWOjlWQa','wmkvW7G','tSkdWR9rW75C','W5XCaW','pLrGBmo9','cSoQW7aSvG','xSk3WOWVha','WP8RW7KFWRq','W5dcGmkjuHxdQdXV','W7W3xq3dGW','c8kJWQylCG','nmoEeCohpW','bxLlWPfjWRm','WRNcICoCCSkC','W7uZsGhdJ8kB','W7a0WQ3cJSoSeCkF','W63cICo2W7b8','WPZcRZm','vCk3AXO+dmkLlCkFdCktW4zFW6VdUCo1mq','W5RcNmo+WO7dMq','tmkQW74','iCk0vs8S','W7C5WQ7cISoRfmke','CSkrm8ogcLf3W6fDW4y','W5JcQNtdPG','oSk4WOa9DK1eW4m','WP01WR3cJ0m','W7mKASkjotezW5DIW4dcRZq','W7SRBYyzzrK','xeacbdy','vv8naby','W5qCW5LKWRvh','j8k6WRpdKW','cXFcQmo2W6eEW7WNwSks','W6LkdCoSW60','cSoJAZFcNeT4','zCkKqIZdGSor','DSkPtJldHSoQW70ZW4xcKdXyuSoV','WR85W6WE','WPKjW4KbWPy','W7nOmCoIW47dKfxcVSk5pG','W4SkW5z/WQvwWOi','W447WRNcUCoDaSokjW','W44MCd4l','wgu3WRzd','vmkIW4PQWRz4W5NdHSoUsHRdJNxcKSkOxmo/BLzkptrzWQddOwJdGwRcIwu5mYZdVc/cI8kSW5rqpCkTs8kiwNn5aCk9W65oEX0','WRH5m8oECMG','CKzLW6JcRSoOWP4','5AYv5ysk5Pw36zEe5zoO5Q625y+I5AsA5BoX5P2Z5ywf77Y76k206ik45BYm56225BYd','WO7cPSoxsSkZ','vx4uhse','W43dSSkscSoUnWpcNSkngmooya','W7JcKSkpFCkvW44Dh0yvB1b6WOBdM8knu8oOjmobW5RdOmkfW6nwAbldSSkWgqldRJaMaSkTqCocW4hdVfzcWOmCtc1CW7CsW7xdG8oxj8opsSoxzhJcNhGTWQ8N','W7/cP8oSzb4','W7mdWO1ekq','W6CbWRtdKqdcOx4','W5nna8o7WPJcMJlcQ8oKpwunW5esWOzuW5FdLCoCW4SCcCo6WQVdRCoGWRC','WQ/cRYRdKW','W6hcPCohW69z','z8oMW7y','5yAM5l2P5yYPW4dNP6JMIApPL5BPNlDJ5yAO5yI56i+U','5lMq5Pwl5O+f6yEk54Q2WOnlmoMaS+I8U+MgToEjTEEHRUwSKEweUU++TUI/IowhHEE7KUAwJ+wSS+MeHEElT+EGJ+woJ+wmLEoaMG','W7lcGmkuASoc','W7/cJCoXW6bLW6bYW6BdLHpcMINdOCox','WQnYkSonBW','WOlcRSkDWRBcHa','W7ddIfGKW7GVvG','W6rSW70','W7fSW7KUWRqhqa','xCkoWRnpW7PNohuYuSkfW4hcVSkF','duzWWO5d','W70OWONcSSoU','gCoQEs7cKhD0mq','C8kKwcy','fCkpfSo9ea','W7BcI8o9ucm','WOlcRSkpWQS','zCkCWRaLzx4Sw8kAW7K','W7W9WOBcQmoNcSoxka','5yEo5yMfwCkz','W7RcUmotWP4','W4OjWPHMaa','WQWxWRlcN1FcGSoeaa','lSoKBSkBW7pdUa','WQpdNSokACkyW5eeqq9unLyXW4NcHCkzdCkZmSkjW5VdQSoDW7XhAXBcTSoMrq7cQW','v8ofWQRdItvqWPiV','kSkSWQG','WRpcTdhdMYC','W6OCsaqj','W6NcV2BcVW','h8kBWRddMJK','W7qhWQFdMblcSxafua'].concat((function(){return['p1D0vmoU','BCoJW5v7mbzjW61UASozWRy','W59ya8oQ','pSkHWRNdMd0','WOJcS8odFCkX','W4GLzstdSW','W67cJCoYW6XRW5bMW73dHG','eSkhWQCQtG','omoWCSkrW67dTCk2W4e','fSoVEddcK0LWma','W5aSWO3cGSoz','a8k2yqi','wCkAWRLtW7bq','cCo2st3cHq','rSk8WOSzlvC','q8kkWPldHWHxWOqpW7WcWPBdJdPXdG','W7xcKCkuWPZcOGK5W73cHJf5C8oFW6ZdS8kOssCWjConWRnYySo+wCo+WPC7W5pcPCk3vqfmfmoqF0a','qSkpW7RdOSkc','cCoMW54jyq','dSoUWQD5W5e','lZNdQdakn3GCDGS','cmoZAdm','W50oW551WR5BWPTi','W4maW4nTWRXFWOvE','E8kIwdhdOG','W6DSW68RWRSbDw3dVmocWQrDW5RcPa','uConW4S','e2Ts','WOr3W5i','uSkIW6ddHmknW5/dO8kcW6JcGG','wmk3W4P7','W7pcKCkkWRhcMa','W7KSWRRcOmol','W6BdIe4PW6WGrW','smkKW5D3','W4eXWRldMay','pKFcHqy','W4RcU8klWQtcUa','W6ZdRslcJMBcJw/cLcvComo6bCkigCkfW6W/zCkKoLDTWPlcHCoGECk3W6BdKmoLqq','hSk3WQGbvq','FSkRsIG','gmkzomovna','54gZ6zsX5Qs75y6Q','W7K1W69f','dmoJyZNcSW','CSkAW4JdISkeW4JdHCkcW7BcJW','W5q1WOFcQa','W7aJtqFdHa','CSkmpmovgLa','m8kwcCo+ha','WQSsWRZcJ1tcJCoicca','kColW6y5yW','eCoQESkzW7BdSmk4WOdcJu/cHW/cQ8kXASkpWPbLWRqkrSkRW6XEW4BcSSoinvDZCNpdLglcOZrdo3xdHxVdKCkqoNqreSk3u2rkpJSQDmklW4tcK8keWRRcPxSZWP3cGSkftSkiW5pdLCo8v8oJWQlcHmoqW4TykYm2qK0VWQtcPt3cPSk1amk3WP7cIvZcKMjEW4aZt8oXWROYhWbSA3pdL3NcVW','jmoTW40WCq','W4K9WOtcQSokgCokixtcUq','W7WjWQpdIbpcRG','p8k9WO0RA0vpW58','W44AW4r2WR9iWQLdW5RdSmkR','g8o3Ca','gCoSWQKDD1KkExztW4bLW5Tq','WONcNCoSA8kr','sejSW7RcUCo2','oIBdMard','hCooh8omW6W','FSkKWRGSoq','fCoJFZlcNazUiCkTWOOpW4SMWPvnWOPBWQZdKSoqWOK','Dmk4W7/dT8kH','cCkuWOJdHXm','W7pdHfO','xeqpgtFdIq','b1D+qq','dCkCWOJdMW','f8kGcSoIkq','W6RcUSoSWPZdIG','WPW1WONcRSokgmoxk3ZcPvO','wgy8WPG','smkBW6xdK8kq','mSkmg8oZ','W5pdUCoyW7xdK2/cIsldV8k4va','WPm2W74DWO4','tSkZW452W600WPm','cmkNWPSRk3W5','W77cSxZcUqJdTCoYW6O','WOibq8k9WPVcH1JcUSkSi14P','W4KKWOBcPmoB','rL4iaG','W5RcM8oCW55M','vemhfYFdHW','W6dcV2i','W5KQWOvJeCkY','pCkHWPmVCu1nW5q','gmk4WOm7AgPdW5D9','W7ZdUxapW4G','WO4kW7u','W7NcHmoN','hwvxWOvy','W7RcVmobWP7dNSoYEW','gHFcQmo5W6eE','c8oLW7C2','W7BcRCotWO/cKCkXimomz8k7W49uWP/dMSksywtdOaXPW7NcSqCCu8olcmk9mZFdH8koWRhdRSo/W6qNl8kJfmoMrCobBq','WQm3W6SxWOG','WPy0W70dWOLHWOq','zCkDo8oagK9T','tCkUDSkFBCkurCoAgJRcM8ojWQdcUSk3W6ldVCouWP9MamoNWPVdSCkOjSoGgCk2n8ozpW','xemCW6ifW63cVa','wmkdWQvB','W7yJBJiEzq','n8oltH7cVW','dSoLW7q','emoYBYVdHWCYomkTWPOdWOKOWOnoWOSaW6NdHmoyWOVcNc3dUSkopSonWRVcUMBcUCkiW54mvXxcKNZdRhb+W7zoWPBdL3T1aW','W5S/WQ7cKCoK','i0PIsCox','W5ZcPmolzsW','w3qTW40b','ySkupmosheP/W7K','W4BcV8kMWQZcLG','qmkZW6FdJmkB','A8kHWR3dJIf2','k8kLWQNdGXe','W5y7WOVcQq','oSkcdSo2','rLiyW75EWQhdTSk3WPpdV0HkWQNdTXbAW4Skmb/dSmk0r17dQd5kzeGIWPhdPetcUu1wW5C6WOBdG8oUtwFcN2TEpCo9W6ddPmoAW4S','W6ZcGmo9W75HW5S','WRihWQRcM3i','pCkrWOZdKIe','W43cM8ofxXddQIzU','wKKyW68i'];}()));}()));}());_0x405a=function(){return _0x4373bf;};return _0x405a();};async function getMediaSource(_0x33d1bd,_0x26e0e3){const _0x32ec69=_0x202c5b,_0x3c67bf=(await axios_1[_0x32ec69(0x1f6,'CEre')][_0x32ec69(0x1ee,'aE0w')]('https://music.haitangw.cc/kgqq/kg.php?id='+_0x33d1bd['id']+_0x32ec69(0x146,'BFsn')+qualityLevels[_0x26e0e3]))[_0x32ec69(0x10b,'^!ZC')];return{'url':_0x3c67bf[_0x32ec69(0x103,'RWq!')]['url']};}async function getTopLists(){const _0x26f787=_0x202c5b,_0x3ba27f={'vaMCP':function(_0x30d01b,_0x1b2dfd){return _0x30d01b===_0x1b2dfd;},'nbfKh':function(_0x199dab,_0x976578){return _0x199dab===_0x976578;},'RszgO':function(_0xe063ee,_0x1d6498){return _0xe063ee===_0x1d6498;},'xnYEN':_0x26f787(0x1c3,'iUNf'),'RRlgp':_0x26f787(0x22d,'*3ba'),'FzBBK':_0x26f787(0x275,'!hM*'),'uRACe':function(_0x159e89,_0x4791f7){return _0x159e89===_0x4791f7;},'BBEYI':'{size}','EqTjk':_0x26f787(0x26f,'8#AH'),'oqTFI':function(_0x5a73b7,_0x5d5509){return _0x5a73b7===_0x5d5509;},'mTMjS':_0x26f787(0x216,'cCSu'),'TmWmI':'\u7279\u8272\u97f3\u4e50\u699c','jcvnd':_0x26f787(0x23f,'2$Dj'),'gSCSz':function(_0x20ad12,_0x19014f){return _0x20ad12!==_0x19014f;}},_0x109c23=(await axios_1[_0x26f787(0x27b,'^w)k')][_0x26f787(0x229,'iUNf')](_0x3ba27f[_0x26f787(0x215,'gTPO')],{'headers':headers}))[_0x26f787(0x239,'OUiY')][_0x26f787(0x115,'S7N@')]['info'],_0x240465=[{'title':_0x26f787(0x1ba,'OaSf'),'data':[]},{'title':_0x3ba27f[_0x26f787(0x11a,'^w)k')],'data':[]},{'title':_0x3ba27f['jcvnd'],'data':[]}],_0x5a72e8={'title':'\u5176\u4ed6','data':[]};return _0x109c23[_0x26f787(0x132,'gTPO')](_0x381e3a=>{const _0x24d35e=_0x26f787,_0x2dbd36={'Qnlzw':function(_0x3d73a1,_0x273f45){return _0x3ba27f['vaMCP'](_0x3d73a1,_0x273f45);},'Qhyyg':_0x24d35e(0x153,'AYko'),'kQmHu':_0x24d35e(0x1aa,'!hM*'),'OMUEB':function(_0x2f3940,_0x46a8b9){const _0x52c9d6=_0x24d35e;return _0x3ba27f[_0x52c9d6(0x160,'X2Y*')](_0x2f3940,_0x46a8b9);}};if(_0x3ba27f[_0x24d35e(0x12b,'aE0w')](_0x3ba27f['xnYEN'],_0x3ba27f['xnYEN'])){var _0x1840a3,_0x52494a,_0x5f5063,_0x4497dd;if(_0x3ba27f['RszgO'](_0x381e3a['classify'],0x1)||_0x381e3a[_0x24d35e(0x120,'oe@V')]===0x2)_0x3ba27f[_0x24d35e(0x121,'OaSf')](_0x3ba27f[_0x24d35e(0x18e,'d0va')],_0x3ba27f[_0x24d35e(0x1b9,'7fal')])?_0x16707f[0x2]['data'][_0x24d35e(0x100,'5#]K')]({'id':_0x2f6db3[_0x24d35e(0x187,'!w7^')],'description':_0x7daa7b[_0x24d35e(0x116,'uXm3')],'coverImg':_0x2dbd36[_0x24d35e(0x112,'gTPO')](_0x556e65=_0x1f98ae[_0x24d35e(0x12e,'7Vt6')],null)||_0x2a9376===void 0x0?void 0x0:_0x5b02e3['replace'](_0x2dbd36[_0x24d35e(0x133,'d0va')],_0x2dbd36['kQmHu']),'title':_0xbe3664[_0x24d35e(0x236,'zcg)')]}):_0x240465[0x0]['data'][_0x24d35e(0x1a5,'j)(F')]({'id':_0x381e3a[_0x24d35e(0x158,'FrC3')],'description':_0x381e3a['intro'],'coverImg':(_0x1840a3=_0x381e3a[_0x24d35e(0x1cd,'$XKC')])===null||_0x3ba27f[_0x24d35e(0x18c,'O0#n')](_0x1840a3,void 0x0)?void 0x0:_0x1840a3[_0x24d35e(0x21d,'%xII')](_0x24d35e(0x10f,'2$Dj'),_0x24d35e(0x26e,'j)(F')),'title':_0x381e3a['rankname']});else{if(_0x381e3a[_0x24d35e(0x14d,'*v#r')]===0x3||_0x381e3a[_0x24d35e(0x256,'5#]K')]===0x5)_0x24d35e(0x147,'OaSf')!=='DEYqr'?_0x19d347[_0x24d35e(0x258,'osUn')](_0x4f6153):_0x240465[0x1][_0x24d35e(0x217,'!hM*')]['push']({'id':_0x381e3a[_0x24d35e(0x20a,'aE0w')],'description':_0x381e3a['intro'],'coverImg':(_0x52494a=_0x381e3a[_0x24d35e(0x111,'cCSu')])===null||_0x3ba27f['nbfKh'](_0x52494a,void 0x0)?void 0x0:_0x52494a[_0x24d35e(0x178,'uM&7')](_0x3ba27f['BBEYI'],_0x3ba27f['EqTjk']),'title':_0x381e3a[_0x24d35e(0x244,'!w7^')]});else _0x3ba27f[_0x24d35e(0x201,'*3ba')](_0x381e3a[_0x24d35e(0x202,'CEre')],0x4)?_0x240465[0x2][_0x24d35e(0x18d,'oe@V')]['push']({'id':_0x381e3a[_0x24d35e(0x235,'gTPO')],'description':_0x381e3a[_0x24d35e(0x139,'iUNf')],'coverImg':_0x3ba27f[_0x24d35e(0x16e,'[9EI')](_0x5f5063=_0x381e3a[_0x24d35e(0x1c7,'5#]K')],null)||_0x3ba27f[_0x24d35e(0x21a,'msq2')](_0x5f5063,void 0x0)?void 0x0:_0x5f5063[_0x24d35e(0x1e0,'ci9J')](_0x24d35e(0x140,'gTPO'),_0x3ba27f['EqTjk']),'title':_0x381e3a[_0x24d35e(0x211,'Yt(0')]}):_0x5a72e8[_0x24d35e(0x274,'BFsn')][_0x24d35e(0x19b,'BFsn')]({'id':_0x381e3a[_0x24d35e(0x1f1,'^w)k')],'description':_0x381e3a[_0x24d35e(0x175,'8#AH')],'coverImg':_0x3ba27f[_0x24d35e(0x156,'Yt(0')](_0x4497dd=_0x381e3a[_0x24d35e(0x1e9,'RWq!')],null)||_0x4497dd===void 0x0?void 0x0:_0x4497dd[_0x24d35e(0x157,'j)(F')](_0x3ba27f['BBEYI'],_0x3ba27f['EqTjk']),'title':_0x381e3a['rankname']});}}else{var _0x5a1b85,_0x10ca40;return{'id':_0x685c0d['albumid'],'artwork':_0x2dbd36[_0x24d35e(0x254,'zcg)')](_0x5a1b85=_0x25f61d[_0x24d35e(0x1fa,'O0#n')],null)||_0x2dbd36[_0x24d35e(0x190,'uXm3')](_0x5a1b85,void 0x0)?void 0x0:_0x5a1b85[_0x24d35e(0x1f8,'*3ba')](_0x2dbd36[_0x24d35e(0x15f,'O0#n')],_0x24d35e(0x135,'msq2')),'artist':_0x164c2a[_0x24d35e(0x1c6,'8p6M')],'title':(0x0,_0x21ebc2[_0x24d35e(0x1dd,'7fal')])(_0x32b8ef[_0x24d35e(0x1c2,'2J8$')])[_0x24d35e(0x263,'7Vt6')](),'description':_0x36d962[_0x24d35e(0x257,'2$Dj')],'date':(_0x10ca40=_0x3d3ee4['publishtime'])===null||_0x2dbd36[_0x24d35e(0x1fb,'j)(F')](_0x10ca40,void 0x0)?void 0x0:_0x10ca40[_0x24d35e(0x249,'8#AH')](0x0,0xa)};}}),_0x3ba27f[_0x26f787(0x117,'OaSf')](_0x5a72e8[_0x26f787(0x21f,'zcg)')]['length'],0x0)&&_0x240465['push'](_0x5a72e8),_0x240465;}async function getTopListDetail(_0x549714){const _0x4d7c6e=_0x202c5b,_0x489767=await axios_1[_0x4d7c6e(0x176,'r%er')][_0x4d7c6e(0x137,'Yt(0')](_0x4d7c6e(0x23d,'d0va')+_0x549714['id']+_0x4d7c6e(0x19f,'!hM*'),{'headers':headers});return Object[_0x4d7c6e(0x134,'gTPO')](Object['assign']({},_0x549714),{'musicList':_0x489767[_0x4d7c6e(0x240,'AYko')][_0x4d7c6e(0x126,'^w)k')][_0x4d7c6e(0x1b4,'ZvMu')][_0x4d7c6e(0x148,'kZE5')](formatMusicItem2)});}async function getLyricDownload(_0x4cfa4a){const _0xfcdbd3=_0x202c5b,_0x25a42f={'UsqTI':'KuGou2012-9020-ExpandSearchManager','MLbrd':_0xfcdbd3(0x222,'$XKC')},_0x140e50=(await(0x0,axios_1[_0xfcdbd3(0x14a,'(zvE')])({'url':_0xfcdbd3(0x161,'ci9J')+_0x4cfa4a['id']+_0xfcdbd3(0x1da,'8p6M')+_0x4cfa4a[_0xfcdbd3(0x11c,'!hM*')]+_0xfcdbd3(0x223,'uXm3'),'headers':{'KG-RC':0x1,'KG-THash':_0xfcdbd3(0x1a0,'2$Dj'),'User-Agent':_0x25a42f[_0xfcdbd3(0x1d2,'kZE5')]},'method':_0x25a42f[_0xfcdbd3(0x1ce,'NoY]')],'xsrfCookieName':_0xfcdbd3(0x1a4,'NoY]'),'withCredentials':!![]}))[_0xfcdbd3(0x1f9,'K$GR')];return{'rawLrc':he[_0xfcdbd3(0x142,'osUn')](CryptoJs['enc'][_0xfcdbd3(0x24b,'j)(F')][_0xfcdbd3(0x165,'cCSu')](_0x140e50[_0xfcdbd3(0x233,'2$Dj')])[_0xfcdbd3(0x15e,'8p6M')](CryptoJs['enc'][_0xfcdbd3(0x14c,'oe@V')]))};}async function getLyric(_0x2cbe57){const _0x44f9d7=_0x202c5b,_0x531a05={'XxVzF':'expand_search_manager.cpp:852736169:451','NGBaZ':_0x44f9d7(0x11d,'OUiY'),'nZrux':_0x44f9d7(0x18a,'d0va'),'YsLJX':_0x44f9d7(0x181,'^!ZC'),'vtfDg':function(_0x4df725,_0x5b0842){return _0x4df725(_0x5b0842);}},_0x5a2f6e=(await(0x0,axios_1['default'])({'url':_0x44f9d7(0x168,'zcg)')+_0x2cbe57[_0x44f9d7(0x253,'iUNf')]+_0x44f9d7(0x205,'d0va')+_0x2cbe57['id']+'&timelength='+_0x2cbe57[_0x44f9d7(0x198,'!w7^')],'headers':{'KG-RC':0x1,'KG-THash':_0x531a05['XxVzF'],'User-Agent':_0x531a05['NGBaZ']},'method':_0x531a05['nZrux'],'xsrfCookieName':_0x531a05[_0x44f9d7(0x195,'osUn')],'withCredentials':!![]}))['data'],_0x3f727e=_0x5a2f6e[_0x44f9d7(0x155,'^w)k')][0x0];return await _0x531a05[_0x44f9d7(0x194,'cCSu')](getLyricDownload,{'id':_0x3f727e['id'],'accessKey':_0x3f727e[_0x44f9d7(0x18f,'5#]K')]});}async function getAlbumInfo(_0x8cadef,_0x488f0b=0x1){const _0xfa77c1=_0x202c5b,_0x3f1022={'tcKca':function(_0x21f94d,_0xd5df63){return _0x21f94d!==_0xd5df63;},'MszgN':'http://mobilecdn.kugou.com/api/v3/album/song','WKcuz':function(_0x37d150,_0x32cfed){return _0x37d150>=_0x32cfed;},'urTQM':function(_0x2c8cb0,_0xfb1136){return _0x2c8cb0*_0xfb1136;}},_0x5a57bc=(await axios_1['default'][_0xfa77c1(0x177,'uM&7')](_0x3f1022[_0xfa77c1(0x1ff,'uXm3')],{'params':{'version':0x2394,'albumid':_0x8cadef['id'],'plat':0x0,'pagesize':0x64,'area_code':0x1,'page':_0x488f0b,'with_res_tag':0x0}}))[_0xfa77c1(0x1ae,'ci9J')];return{'isEnd':_0x3f1022[_0xfa77c1(0x14e,'2J8$')](_0x3f1022[_0xfa77c1(0x265,'AYko')](_0x488f0b,0x64),_0x5a57bc[_0xfa77c1(0x184,'OaSf')]['total']),'albumItem':{'worksNum':_0x5a57bc['data'][_0xfa77c1(0x1f4,'z*BR')]},'musicList':_0x5a57bc['data'][_0xfa77c1(0x1d6,'uXm3')]['map'](_0x283bda=>{const _0x20dcf5=_0xfa77c1;var _0x3a976b;const [_0x48efc6,_0x4c9e02]=_0x283bda['filename'][_0x20dcf5(0x151,'OUiY')]('-');return{'id':_0x283bda[_0x20dcf5(0x1d7,'!hM*')],'title':_0x4c9e02[_0x20dcf5(0x1b2,'ci9J')](),'artist':_0x48efc6[_0x20dcf5(0x101,'AYko')](),'album':_0x3f1022['tcKca'](_0x3a976b=_0x283bda['album_name'],null)&&_0x3f1022[_0x20dcf5(0x1d9,'OaSf')](_0x3a976b,void 0x0)?_0x3a976b:_0x283bda[_0x20dcf5(0x162,'S7N@')],'album_id':_0x283bda[_0x20dcf5(0x252,'ZvMu')],'album_audio_id':_0x283bda['album_audio_id'],'artwork':_0x8cadef[_0x20dcf5(0x127,'cCSu')],'320hash':_0x283bda[_0x20dcf5(0x15c,'Yt(0')],'sqhash':_0x283bda[_0x20dcf5(0x129,'j)(F')],'origin_hash':_0x283bda['id']};})};}async function importMusicSheet(_0x216d09){const _0x244439=_0x202c5b,_0x2ef569={'CxPmd':function(_0x4009a7,_0x190a23){return _0x4009a7!==_0x190a23;},'NXRpq':function(_0x4ce78b,_0x2e0165){return _0x4ce78b===_0x2e0165;},'Reoby':function(_0xf7d14,_0x335556){return _0xf7d14+_0x335556;},'Hjqyc':function(_0x3394f1,_0x37e1e9){return _0x3394f1+_0x37e1e9;},'gJYzL':function(_0x4e2364,_0x492cad){return _0x4e2364===_0x492cad;},'UcxAu':function(_0x5f27eb,_0x503f69){return _0x5f27eb===_0x503f69;},'ZRoYt':_0x244439(0x245,'RWq!'),'wFLYD':_0x244439(0x1ac,'RWq!'),'HdYaW':_0x244439(0x1bf,'osUn'),'WEERJ':_0x244439(0x1e6,'[9EI'),'tuMct':'21511157a05844bd085308bc76ef3343','CDoRJ':_0x244439(0x1f7,'%xII'),'GiInH':function(_0x315699,_0x5553c9){return _0x315699===_0x5553c9;},'cDtAj':'VOqby','moDDg':_0x244439(0x1b6,'HYwy'),'KeRRZ':_0x244439(0x188,'zcg)'),'bKoTX':function(_0x5d54f2,_0x30e13c){return _0x5d54f2===_0x30e13c;},'bRgMO':function(_0x470568,_0x58215f){return _0x470568===_0x58215f;},'XlwaA':'WmxwS','Klljo':_0x244439(0x1df,'z*BR'),'CkZOq':_0x244439(0x213,'FrC3'),'jxgOv':_0x244439(0x221,'Yt(0'),'eULvs':_0x244439(0x1d1,'j)(F'),'wZIRG':function(_0x236e1a,_0x407c01){return _0x236e1a===_0x407c01;}};var _0x2ed3b1;let _0x17551d=_0x2ef569[_0x244439(0x24e,'!hM*')](_0x2ed3b1=_0x216d09[_0x244439(0x13d,'osUn')](/^(?:.*?)(\\d+)(?:.*?)$/),null)||_0x2ed3b1===void 0x0?void 0x0:_0x2ed3b1[0x1],_0x5a287e=[];if(!_0x17551d){if(_0x2ef569[_0x244439(0x25e,'Yt(0')]!=='ntqHr')return;else{const _0x4ac91a=_0x539347['indexOf'](_0x23d214);_0x2ef569[_0x244439(0x1b0,'8p6M')](_0x4ac91a,-0x1)&&(_0x33ca71=_0x2ef569[_0x244439(0x206,'!hM*')](_0x158867=_0x47856c['substring'](_0x2ef569[_0x244439(0x218,'oe@V')](_0x2ef569[_0x244439(0x24c,'2^hK')](_0x4ac91a,_0x35d925[_0x244439(0x264,'$XKC')]),0x2)),null)||_0x430082===void 0x0?void 0x0:_0xd55dd8['trim']()),!_0x3529d1&&(_0x425157=_0x350418);}}let _0x1d683c=await axios_1[_0x244439(0x15d,'AYko')]['post'](_0x244439(0x16c,'Yt(0'),{'appid':0x3e9,'clientver':0x233c,'mid':_0x2ef569['tuMct'],'clienttime':0x262efa1f,'key':_0x2ef569[_0x244439(0x16a,'RWq!')],'data':_0x17551d});if(_0x2ef569[_0x244439(0x1c5,'iUNf')](_0x1d683c[_0x244439(0x1c0,'CEre')],0xc8)&&_0x2ef569[_0x244439(0x27a,'!w7^')](_0x1d683c[_0x244439(0x184,'OaSf')]['status'],0x1)){if(_0x2ef569[_0x244439(0x259,'7fal')](_0x2ef569['cDtAj'],_0x2ef569[_0x244439(0x1a1,'kZE5')])){let _0x5c7dd8=_0x1d683c[_0x244439(0x277,'d0va')]['data'],_0xb6a103=await axios_1[_0x244439(0x150,'O0#n')][_0x244439(0x113,'msq2')](_0x244439(0x209,'*3ba'),{'appid':0x3e9,'clientver':0x2780,'mid':_0x2ef569[_0x244439(0x11b,'5#]K')],'clienttime':0x2b0c31ed,'key':_0x2ef569['KeRRZ'],'data':{'id':_0x5c7dd8[_0x244439(0x105,'%xII')]['id'],'type':0x3,'userid':_0x5c7dd8[_0x244439(0x1e5,'OUiY')][_0x244439(0x212,'j)(F')],'collect_type':_0x5c7dd8[_0x244439(0x225,'^!ZC')][_0x244439(0x21b,'X2Y*')],'page':0x1,'pagesize':_0x5c7dd8[_0x244439(0x1b8,'FrC3')][_0x244439(0x1ef,'gTPO')]}});if(_0x2ef569[_0x244439(0x1a3,'msq2')](_0xb6a103[_0x244439(0x10e,'2J8$')],0xc8)&&_0x2ef569[_0x244439(0x128,'iUNf')](_0xb6a103[_0x244439(0x103,'RWq!')][_0x244439(0x10a,'8#AH')],0x1)){if(_0x2ef569[_0x244439(0x20c,'!hM*')]===_0x2ef569[_0x244439(0x17e,'7fal')])_0x1be9f9[0x0][_0x244439(0x224,'z*BR')][_0x244439(0x214,'^w)k')]({'id':_0x990855[_0x244439(0x136,'K$GR')],'description':_0x3c8430[_0x244439(0x174,'S7N@')],'coverImg':_0x2ef569[_0x244439(0x250,'8p6M')](_0x216b1f=_0x4719f5[_0x244439(0x276,'8p6M')],null)||_0x2ef569[_0x244439(0x108,'8p6M')](_0x5f071d,void 0x0)?void 0x0:_0x263853[_0x244439(0x1b1,'r%er')](_0x2ef569[_0x244439(0x1b5,'2$Dj')],_0x2ef569[_0x244439(0x268,'^w)k')]),'title':_0x177a94[_0x244439(0x1a6,'AYko')]});else{let _0x4abbec=[];_0xb6a103[_0x244439(0x17d,'FrC3')][_0x244439(0x192,'Yt(0')][_0x244439(0x25c,'j)(F')](_0x23a08a=>{const _0x1a54e9=_0x244439;_0x4abbec[_0x1a54e9(0x19b,'BFsn')]({'album_audio_id':0x0,'album_id':'0','hash':_0x23a08a[_0x1a54e9(0x15a,'z*BR')],'id':0x0,'name':_0x23a08a[_0x1a54e9(0x186,'2J8$')][_0x1a54e9(0x267,'osUn')](_0x1a54e9(0x1bb,'z*BR'),''),'page_id':0x0,'type':_0x2ef569[_0x1a54e9(0x17f,'2^hK')]});});let _0x49343a={'appid':0x3e9,'area_code':'1','behavior':'play','clientver':_0x2ef569[_0x244439(0x1d0,'^!ZC')],'dfid':_0x2ef569[_0x244439(0x19a,'8p6M')],'mid':_0x2ef569[_0x244439(0x12a,'2J8$')],'need_hash_offset':0x1,'relate':0x1,'resource':_0x4abbec,'token':'','userid':'0','vip':0x0};var _0x507872=await axios_1[_0x244439(0x118,'%xII')]['post'](_0x244439(0x131,'^!ZC'),_0x49343a,{'headers':{'x-router':_0x2ef569[_0x244439(0x26a,'8#AH')]}});_0x2ef569[_0x244439(0x200,'2^hK')](_0xb6a103[_0x244439(0x1d5,'OUiY')],0xc8)&&_0x2ef569[_0x244439(0x1cc,'cCSu')](_0xb6a103[_0x244439(0x122,'y@Gu')][_0x244439(0x273,'y@Gu')],0x1)&&(_0x5a287e=_0x507872[_0x244439(0x262,'$XKC')][_0x244439(0x184,'OaSf')][_0x244439(0x1fc,'iUNf')](formatImportMusicItem));}}}else return;}return _0x5a287e;}module['exports']={'platform':_0x202c5b(0x183,'oe@V'),'version':_0x202c5b(0x11e,'gTPO'),'author':_0x202c5b(0x170,'2J8$'),'srcUrl':'https://13413.kstore.vip/yuanli/kg.js','cacheControl':_0x202c5b(0x13c,'2^hK'),'description':'','primaryKey':['id','album_id',_0x202c5b(0x159,'FrC3')],'hints':{'importMusicSheet':[_0x202c5b(0x171,'5#]K'),_0x202c5b(0x164,'y@Gu')]},'supportedSearchType':['music','album',_0x202c5b(0x193,'d0va')],async 'search'(_0x37c94f,_0x4a5e06,_0x4da6c5){const _0x3c0d56=_0x202c5b,_0x3c01e5={'RwGEw':function(_0x5dea3d,_0x475e9c){return _0x5dea3d===_0x475e9c;},'qkIFU':_0x3c0d56(0x1c1,'7fal'),'ntAYp':function(_0x41770e,_0x4d7d3e,_0x452ea7){return _0x41770e(_0x4d7d3e,_0x452ea7);},'KpkPn':'album','GcIOP':_0x3c0d56(0x144,'aE0w')};if(_0x3c01e5[_0x3c0d56(0x13e,'*v#r')](_0x4da6c5,_0x3c01e5[_0x3c0d56(0x234,'HYwy')]))return await _0x3c01e5[_0x3c0d56(0x22e,'X2Y*')](searchMusic,_0x37c94f,_0x4a5e06);else{if(_0x3c01e5[_0x3c0d56(0x149,'BFsn')](_0x4da6c5,_0x3c01e5[_0x3c0d56(0x231,'AYko')]))return await searchAlbum(_0x37c94f,_0x4a5e06);else{if(_0x4da6c5===_0x3c01e5[_0x3c0d56(0x1b7,'*v#r')])return await _0x3c01e5[_0x3c0d56(0x17b,'(zvE')](searchMusicSheet,_0x37c94f,_0x4a5e06);}}},'getMediaSource':getMediaSource,'getTopLists':getTopLists,'getLyric':getLyric,'getTopListDetail':getTopListDetail,'getAlbumInfo':getAlbumInfo,'importMusicSheet':importMusicSheet};var version_ = 'jsjiami.com.v7';", "id": "msg_1789568439508"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 元力KG, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568439508: True [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 元力KG [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸歌词 [2026-09-16 22:20:39] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u78b3\u9178\u6b4c\u8bcd", "code": "'use strict';const _0x25ab3b=_0x2c17;function _0x2c17(_0x2eecc5,_0x476554){const _0x3c5e3=_0x3c5e();return _0x2c17=function(_0x2c17df,_0x528ba4){_0x2c17df=_0x2c17df-0x1af;let _0x15dbed=_0x3c5e3[_0x2c17df];return _0x15dbed;},_0x2c17(_0x2eecc5,_0x476554);}(function(_0x5527c0,_0x510214){const _0x548ef0=_0x2c17,_0x2b7c7d=_0x5527c0();while(!![]){try{const _0x33bb76=parseInt(_0x548ef0(0x1c5))/0x1*(parseInt(_0x548ef0(0x1b8))/0x2)+-parseInt(_0x548ef0(0x1c9))/0x3*(-parseInt(_0x548ef0(0x1ce))/0x4)+-parseInt(_0x548ef0(0x1ca))/0x5*(parseInt(_0x548ef0(0x1c0))/0x6)+-parseInt(_0x548ef0(0x1cd))/0x7*(-parseInt(_0x548ef0(0x1af))/0x8)+parseInt(_0x548ef0(0x1b1))/0x9+parseInt(_0x548ef0(0x1b0))/0xa*(parseInt(_0x548ef0(0x1bb))/0xb)+parseInt(_0x548ef0(0x1b2))/0xc*(-parseInt(_0x548ef0(0x1cc))/0xd);if(_0x33bb76===_0x510214)break;else _0x2b7c7d['push'](_0x2b7c7d['shift']());}catch(_0x19fa85){_0x2b7c7d['push'](_0x2b7c7d['shift']());}}}(_0x3c5e,0x668bf));function _0x3c5e(){const _0x5a3499=['children','data','244623TJXJxM','2485SYoAHl','lNlXU','13YiBfpx','5432833WZWqMU','28igekvH','8pkAPGm','3689300huorYV','1733805OwWWhp','19015284nkIvSK','\u8461\u8404\u7403\u541b','div#lyrics','\u78b3\u9178\u6b4c\u8bcd\u67e5\u8be2','defineProperty','default','24hFjEzj','VvzDz','lyric','11NOIBdh','trim','replace','https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js','no-store','1626kNXRcY','href','https://zh.followlyrics.com/search','text','get','19237CfXSFd','toArray'];_0x3c5e=function(){return _0x5a3499;};return _0x3c5e();}Object[_0x25ab3b(0x1b6)](exports,'__esModule',{'value':!![]});const axios_1=require('axios'),cheerio_1=require('cheerio');async function search(_0x4ec173,_0x2bd628,_0xce4362){const _0x1ddb23=_0x25ab3b,_0x2e1586={'TLETA':function(_0x1a9fa0,_0x3d82cf){return _0x1a9fa0(_0x3d82cf);},'VvzDz':function(_0x129c41,_0x5cfba6){return _0x129c41(_0x5cfba6);},'yECOo':function(_0x333997,_0x4b3e22){return _0x333997(_0x4b3e22);},'owTKm':_0x1ddb23(0x1c1),'lNlXU':function(_0x1815a7,_0x3cfae2){return _0x1815a7!==_0x3cfae2;},'yHmag':function(_0x58e33d,_0xdb9e8f){return _0x58e33d(_0xdb9e8f);}};if(_0x2e1586[_0x1ddb23(0x1cb)](_0xce4362,_0x1ddb23(0x1ba)))return;const _0x26de68=(await axios_1['default']['get'](_0x1ddb23(0x1c2),{'params':{'name':_0x4ec173,'type':'song'}}))[_0x1ddb23(0x1c8)],_0x80e038=(0x0,cheerio_1['load'])(_0x26de68),_0xe1f37f=_0x2e1586['yHmag'](_0x80e038,'.table.table-striped\\x20>\\x20tbody'),_0x4b6b40=_0xe1f37f['children']('tr'),_0x4b36a3=_0x4b6b40['map']((_0x1f082d,_0x4c344a)=>{const _0x543df0=_0x1ddb23,_0x12b4c=_0x2e1586['TLETA'](_0x80e038,_0x4c344a)[_0x543df0(0x1c7)](),_0x2c2ca7=_0x2e1586[_0x543df0(0x1b9)](_0x80e038,_0x12b4c['get'](0x0))[_0x543df0(0x1c3)]()[_0x543df0(0x1bc)](),_0x1d45bd=_0x80e038(_0x12b4c[_0x543df0(0x1c4)](0x1))[_0x543df0(0x1c3)]()[_0x543df0(0x1bc)](),_0x34dca7=_0x2e1586['yECOo'](_0x80e038,_0x12b4c['get'](0x2))[_0x543df0(0x1c3)]()['trim'](),_0x231e66=_0x80e038(_0x12b4c['get'](0x3))[_0x543df0(0x1c7)]('a')['attr'](_0x2e1586['owTKm']);return{'title':_0x2c2ca7,'artist':_0x1d45bd,'album':_0x34dca7,'id':_0x231e66};})[_0x1ddb23(0x1c6)]();return{'isEnd':!![],'data':_0x4b36a3};}async function getLyric(_0x41c392){const _0x3ead91=_0x25ab3b,_0x1c2f99=(await axios_1[_0x3ead91(0x1b7)]['get'](_0x41c392['id']))['data'],_0x30dfbf=(0x0,cheerio_1['load'])(_0x1c2f99),_0x5b5f3d=_0x30dfbf(_0x3ead91(0x1b4))['text']()[_0x3ead91(0x1bd)](/\\n/g,'');return{'rawLrc':_0x5b5f3d};}module['exports']={'platform':_0x25ab3b(0x1b5),'version':'0.1.7','author':_0x25ab3b(0x1b3),'srcUrl':_0x25ab3b(0x1be),'cacheControl':_0x25ab3b(0x1bf),'supportedSearchType':[_0x25ab3b(0x1ba)],'search':search,'getLyric':getLyric};", "id": "msg_1789568439810"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:39] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 碳酸歌词, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568439810: True [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 碳酸歌词 [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDav_lrc [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDav_lrc: Module 'webdav' is not allowed or not installed [2026-09-16 22:20:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDav_lrc", "code": "/*\n * \u57fa\u4e8e [https://gitee.com/maotoumao/MusicFreePlugins] \u4fee\u6539\n * \u539f\u59cb\u7248\u6743: [\u732b\u5934\u732b]\n * \u4fee\u6539\u8bf4\u660e: \u65b0\u589eWebDAV\u652f\u6301\u6b4c\u8bcd\u663e\u793a\uff0c\u6b4c\u8bcd\u540d\u548c\u6b4c\u66f2\u540d\u9700\u8981\u76f8\u540c\n * \n * \u672c\u7a0b\u5e8f\u662f\u81ea\u7531\u8f6f\u4ef6\uff0c\u9075\u5faaGPLv3\u8bb8\u53ef\n */\n\n\n\"use strict\";\n\nconst { createClient, AuthType } = require(\"webdav\");\n\n// \u7f13\u5b58WebDAV\u5ba2\u6237\u7aef\u548c\u6587\u4ef6\u5217\u8868\nlet cachedData = {\n client: null,\n url: null,\n username: null,\n password: null,\n searchPath: null,\n searchPathList: null,\n cacheFileList: null,\n lastFetchTime: 0,\n lyric: {}\n};\n\n// \u7f13\u5b58\u6709\u6548\u671f\uff081\u5c0f\u65f6\uff09\nconst CACHE_TTL = 60 * 60 * 1000;\n\n/**\n * \u83b7\u53d6\u6216\u521b\u5efaWebDAV\u5ba2\u6237\u7aef\n * \u901a\u8fc7\u7f13\u5b58\u907f\u514d\u91cd\u590d\u521b\u5efa\u8fde\u63a5\n */\nfunction getClient() {\n // \u4ece\u73af\u5883\u53d8\u91cf\u83b7\u53d6\u914d\u7f6e\n const userVars = env.getUserVariables ? env.getUserVariables() : (env.userVariables || {});\n const { url, username, password, searchPath } = userVars;\n\n // \u9a8c\u8bc1\u5fc5\u8981\u914d\u7f6e\n if (!url || !username || !password) {\n console.error(\"WebDAV\u914d\u7f6e\u4e0d\u5b8c\u6574\");\n return null;\n }\n\n // \u68c0\u67e5\u914d\u7f6e\u662f\u5426\u53d8\u66f4\uff0c\u5982\u53d8\u66f4\u5219\u6e05\u9664\u7f13\u5b58\n const configChanged = (\n cachedData.url !== url ||\n cachedData.username !== username ||\n cachedData.password !== password ||\n cachedData.searchPath !== searchPath\n );\n\n if (configChanged || !cachedData.client) {\n // \u66f4\u65b0\u7f13\u5b58\u6570\u636e\n cachedData = {\n client: null,\n url,\n username,\n password,\n searchPath: searchPath || null,\n searchPathList: searchPath ? searchPath.split(\",\").map(path => path.trim()).filter(Boolean) : ['/'],\n cacheFileList: null,\n lastFetchTime: 0\n };\n\n // \u521b\u5efa\u65b0\u7684WebDAV\u5ba2\u6237\u7aef\n try {\n cachedData.client = createClient(url, {\n authType: AuthType.Password,\n username,\n password\n });\n } catch (error) {\n console.error(\"\u521b\u5efaWebDAV\u5ba2\u6237\u7aef\u5931\u8d25:\", error);\n return null;\n }\n }\n\n return cachedData.client;\n}\n\n/**\n * \u83b7\u53d6\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u97f3\u9891\u6587\u4ef6\n * \u652f\u6301\u9012\u5f52\u641c\u7d22\u5b50\u76ee\u5f55\n */\nasync function getAudioFilesFromDirectory(client, path, recursive = true) {\n try {\n const items = await client.getDirectoryContents(path);\n const audioFiles = [];\n\n for (const item of items) {\n if (item.type === \"directory\" && recursive) {\n // \u9012\u5f52\u641c\u7d22\u5b50\u76ee\u5f55\n const subDirFiles = await getAudioFilesFromDirectory(client, item.filename, recursive);\n audioFiles.push(...subDirFiles);\n } else if (item.type === \"file\" && item.mime && item.mime.startsWith(\"audio\")) {\n audioFiles.push(item);\n }\n }\n\n return audioFiles;\n } catch (error) {\n console.error(`\u83b7\u53d6\u76ee\u5f55 ${path} \u5185\u5bb9\u5931\u8d25:`, error);\n return [];\n }\n}\n\n/**\n * \u641c\u7d22\u97f3\u4e50\n * \u901a\u8fc7\u7f13\u5b58\u4f18\u5316\u91cd\u590d\u641c\u7d22\u6027\u80fd\n */\nasync function searchMusic(query) {\n const client = getClient();\n if (!client) {\n return { isEnd: true, data: [] };\n }\n\n const now = Date.now();\n const cacheExpired = now - cachedData.lastFetchTime > CACHE_TTL;\n\n // \u5982\u679c\u7f13\u5b58\u4e3a\u7a7a\u6216\u5df2\u8fc7\u671f\uff0c\u91cd\u65b0\u83b7\u53d6\u6587\u4ef6\u5217\u8868\n if (!cachedData.cacheFileList || cachedData.cacheFileList.length === 0 || cacheExpired) {\n const searchPaths = cachedData.searchPathList && cachedData.searchPathList.length > 0\n ? cachedData.searchPathList\n : ['/'];\n\n const filePromises = searchPaths.map(path =>\n getAudioFilesFromDirectory(client, path, true)\n );\n\n try {\n const results = await Promise.allSettled(filePromises);\n cachedData.cacheFileList = results\n .filter(result => result.status === \"fulfilled\")\n .flatMap(result => result.value);\n cachedData.lastFetchTime = now;\n } catch (error) {\n console.error(\"\u83b7\u53d6\u97f3\u9891\u6587\u4ef6\u5217\u8868\u5931\u8d25:\", error);\n cachedData.cacheFileList = [];\n }\n }\n\n // \u5982\u679c\u6ca1\u6709\u67e5\u8be2\u5173\u952e\u8bcd\uff0c\u8fd4\u56de\u6240\u6709\u6587\u4ef6\n if (!query || query.trim() === \"\") {\n return {\n isEnd: true,\n data: (cachedData.cacheFileList || []).map(file => ({\n title: file.basename || \"\u672a\u77e5\u6b4c\u66f2\",\n id: file.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\"\n }))\n };\n }\n\n // \u6839\u636e\u5173\u952e\u8bcd\u8fc7\u6ee4\n const searchTerm = query.toLowerCase();\n const filteredFiles = (cachedData.cacheFileList || [])\n .filter(file => {\n if (!file.basename) return false;\n return file.basename.toLowerCase().includes(searchTerm);\n })\n .map(file => ({\n title: file.basename,\n id: file.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\"\n }));\n\n return {\n isEnd: true,\n data: filteredFiles\n };\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u5355\u5217\u8868\n */\nasync function getTopLists() {\n getClient(); // \u786e\u4fdd\u5ba2\u6237\u7aef\u521d\u59cb\u5316\n const searchPaths = cachedData.searchPathList || ['/'];\n\n return [{\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: searchPaths.map(path => ({\n title: path,\n id: path\n }))\n }];\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n */\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n if (!client || !topListItem || !topListItem.id) {\n return { musicList: [] };\n }\n\n try {\n const fileItems = await getAudioFilesFromDirectory(client, topListItem.id, false);\n\n return {\n musicList: fileItems.map(item => ({\n title: item.basename || \"\u672a\u77e5\u6b4c\u66f2\",\n id: item.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\"\n }))\n };\n } catch (error) {\n console.error(`\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25 ${topListItem.id}:`, error);\n return { musicList: [] };\n }\n}\n\n/**\n * \u83b7\u53d6\u5a92\u4f53\u6e90URL\n */\nfunction getMediaSource(musicItem) {\n const client = getClient();\n if (!client || !musicItem || !musicItem.id) {\n return { url: null };\n }\n\n try {\n return {\n url: client.getFileDownloadLink(musicItem.id)\n };\n } catch (error) {\n console.error(\"\u83b7\u53d6\u5a92\u4f53\u6e90URL\u5931\u8d25:\", error);\n return { url: null };\n }\n}\n\n/**\n * \u641c\u7d22\u51fd\u6570\uff08\u4e3b\u5165\u53e3\uff09\n */\nfunction search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n\n return Promise.resolve({ isEnd: true, data: [] });\n}\n\n\n// \u83b7\u53d6\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n\n if (!musicItem || !musicItem.id) {\n return;\n }\n let content = cachedData[musicItem.id];\n if (content){\n return {\n rawLrc: content, // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n translation: content // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n }\n }\n const client = getClient();\n\n // \u540e\u7f00\u6362\u6210 .lrc\n let i = musicItem.id.lastIndexOf('.');\n let lrcPath = musicItem.id.substring(0, i) + '.lrc';\n\n try {\n // \u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9\n const content = await client.getFileContents(lrcPath, {\n format: 'text'\n });\n\n cachedData[musicItem.id] = content;\n return {\n rawLrc: content, // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n translation: content // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n }\n\n } catch (error) {\n let path = lrcPath\n if (error && error.response && error.response.url){\n path = error.response.url\n }\n console.error(`\u8bfb\u53d6\u6587\u4ef6\u5931\u8d25 ${path}:`, error);\n }\n}\n\n\n// \u5bfc\u51fa\u6a21\u5757\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"mcck\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n hint: \"\u4f8b\u5982: https://example.com/dav\"\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\"\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\"\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n hint: \"\u591a\u4e2a\u8def\u5f84\u7528\u9017\u53f7\u5206\u9694\uff0c\u4f8b\u5982: /Music,/Audio\"\n }\n ],\n version: \"0.1.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/mcck-tools/other/raw/master/musicfree/webdav.js\",\n // srcUrl: \"http://172.88.0.47:5500/webdav.js\",\n cacheControl: \"no-cache\",\n\n // \u4e3b\u529f\u80fd\u63a5\u53e3\n search,\n getTopLists,\n getTopListDetail,\n getMediaSource,\n getLyric\n};", "id": "msg_1789568440111"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:40] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 22:20:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDav_lrc, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568440111: False [2026-09-16 22:20:40] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDav_lrc: Module 'webdav' is not allowed or not installed [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613Ciallo\uff5e(\u2220\u30fb\u03c9_ )\u2312\u2606", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\n\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\n\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\n\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\n\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\n\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\n\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\n\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\n\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\n\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\n\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\n\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\n\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\n\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\n\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\n\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\n\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\n\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\n\nasync function getMediaSource(musicItem, quality) {\n const API_BASE = 'https://api.s0o1.com/API/wyy_music';\n \n const yzMap = {\n 'low': '1',\n 'standard': '2',\n 'high': '3',\n 'super': '4'\n };\n \n const yz = yzMap[quality] || '7';\n const apiUrl = `${API_BASE}?id=${musicItem.id}&yz=${yz}`;\n \n try {\n const response = await axios_1.default.get(apiUrl, {\n timeout: 8000\n });\n \n const data = response.data;\n if (data.status === 200 && data.success && data.data && data.data.url) {\n return {\n url: data.data.url,\n };\n } else {\n throw new Error('\u83b7\u53d6\u97f3\u9891\u5730\u5740\u5931\u8d25');\n }\n } catch (error) {\n throw new Error('\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25');\n }\n}\n\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\n\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\n\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\n\nmodule.exports = {\n platform: \"Ciallo\uff5e(\u2220\u30fb\u03c9< )\u2312\u2606(\u4ec5\u7f51\u6613)\",\n author: \"\u73a5\u7136OvO\",\n version: \"1.0721\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E7%BD%91%E6%98%93Ciallo~(%E2%88%A0%E3%83%BB%CF%89_%20)%E2%8C%92%E2%98%86.js\",\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568440414"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易Ciallo~(∠・ω_ )⌒☆, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568440414: True [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 22:20:40] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789568440715"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:40] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568440715: True [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789568441016"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568441016: True [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 迟言QQ [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u8fdf\u8a00QQ", "code": "var $fFvhi$axios = require(\"axios\");\nvar $fFvhi$cryptojs = require(\"crypto-js\");\nvar $fFvhi$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $d25ff3d008f9e7e0$export$2e2bcd8739ae039);\n\n\n\nconst $d25ff3d008f9e7e0$var$pageSize = 20;\nfunction $d25ff3d008f9e7e0$var$formatMusicItem(_) {\n var _a, _b, _c;\n const albumid = _.albumid || ((_a = _.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid = _.albummid || ((_b = _.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname = _.albumname || ((_c = _.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: _.id || _.songid,\n songmid: _.mid || _.songmid,\n title: _.title || _.songname,\n artist: _.singer.map((s)=>s.name).join(\", \"),\n artwork: albummid ? `https://y.gtimg.cn/music/photo_new/T002R800x800M000${albummid}.jpg` : undefined,\n album: albumname,\n lrc: _.lyric || undefined,\n albumid: albumid,\n albummid: albummid\n };\n}\nfunction $d25ff3d008f9e7e0$var$formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork: _.albumPic || `https://y.gtimg.cn/music/photo_new/T002R800x800M000${_.albumMID || _.album_mid}.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc\n };\n}\nfunction $d25ff3d008f9e7e0$var$formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum\n };\n}\nconst $d25ff3d008f9e7e0$var$searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\"\n};\nconst $d25ff3d008f9e7e0$var$headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\"\n};\nasync function $d25ff3d008f9e7e0$var$searchBase(query, page, type) {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: $d25ff3d008f9e7e0$var$pageSize,\n page_num: page,\n query: query,\n search_type: type\n }\n }\n },\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.req_1.data.body[$d25ff3d008f9e7e0$var$searchTypeMap[type]].list\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchMusic(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchAlbum(query, page) {\n const albums = await $d25ff3d008f9e7e0$var$searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchArtist(query, page) {\n const artists = await $d25ff3d008f9e7e0$var$searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map($d25ff3d008f9e7e0$var$formatArtistItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchMusicSheet(query, page) {\n const musicSheet = await $d25ff3d008f9e7e0$var$searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item)=>({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name\n }))\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchLyric(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it)=>Object.assign(Object.assign({}, $d25ff3d008f9e7e0$var$formatMusicItem(it)), {\n rawLrcTxt: it.content\n }))\n };\n}\nfunction $d25ff3d008f9e7e0$var$getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) s = sArr[1];\n else return key ? undefined : {};\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item)=>{\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n } catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction $d25ff3d008f9e7e0$var$changeUrlQuery(obj, baseUrl) {\n const query = $d25ff3d008f9e7e0$var$getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key)=>{\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst $d25ff3d008f9e7e0$var$typeMap = {\n m4a: {\n s: \"C400\",\n e: \".m4a\"\n },\n 128: {\n s: \"M500\",\n e: \".mp3\"\n },\n 320: {\n s: \"M800\",\n e: \".mp3\"\n },\n ape: {\n s: \"A000\",\n e: \".ape\"\n },\n flac: {\n s: \"F000\",\n e: \".flac\"\n }\n};\nasync function $d25ff3d008f9e7e0$var$getAlbumInfo(albumItem) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2\n },\n module: \"music.musichallAlbum.AlbumSongList\"\n }\n })\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n musicList: res.albumSonglist.data.songList.map((item)=>{\n const _ = item.songInfo;\n return $d25ff3d008f9e7e0$var$formatMusicItem(_);\n })\n };\n}\nasync function $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singer.data.total_song <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singer.data.songlist.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize / 1,\n exstatus: 1\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singerAlbum.data.list.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$getArtistWorks(artistItem, page, type) {\n if (type === \"music\") return $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page);\n if (type === \"album\") return $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page);\n}\nasync function $d25ff3d008f9e7e0$var$getLyric(musicItem) {\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid}&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: {\n Referer: \"https://y.qq.com\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n let translation;\n if (res.trans) translation = (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.trans).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8));\n return {\n rawLrc: (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.lyric).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8)),\n translation: translation\n };\n}\nasync function $d25ff3d008f9e7e0$var$importMusicSheet(urlLike) {\n let id;\n if (!id) id = (urlLike.match(/https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id) return;\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://i.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: {\n Referer: \"https://y.qq.com/n/yqq/playlist\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n return res.cdlist[0].songlist.map($d25ff3d008f9e7e0$var$formatMusicItem);\n}\nasync function $d25ff3d008f9e7e0$var$getTopLists() {\n const list = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return list.data.topList.data.group.map((e)=>({\n title: e.groupName,\n data: e.toplist.map((_)=>({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl\n }))\n }));\n}\nasync function $d25ff3d008f9e7e0$var$getTopListDetail(topListItem) {\n var _a;\n const res = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id}%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"}%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList.map($d25ff3d008f9e7e0$var$formatMusicItem)\n });\n}\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetTags() {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\", {\n headers: {\n referer: \"https://y.qq.com/\"\n }\n })).data.data.categories;\n const data = res.slice(1).map((_)=>({\n title: _.categoryGroupName,\n data: _.items.map((tag)=>({\n id: tag.categoryId,\n title: tag.categoryName\n }))\n }));\n const pinned = [];\n for (let d of data)if (d.data.length) pinned.push(d.data[0]);\n return {\n pinned: pinned,\n data: data\n };\n}\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\", {\n headers: {\n referer: \"https://y.qq.com/\"\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId: (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1\n }\n })).data;\n const res = JSON.parse(rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item)=>{\n var _a, _b;\n return {\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist: (_b = (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"\"\n };\n });\n return {\n isEnd: isEnd,\n data: data\n };\n}\nasync function $d25ff3d008f9e7e0$var$getMusicSheetInfo(sheet, page) {\n const data = await $d25ff3d008f9e7e0$var$importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getMediaSource(musicItem, quality) {\n const apiUrl = `https://cyapi.top/API/qq_music.php?apikey=1ffdf5733f5d538760e63d7e46ba17438d9f7b9dfc18c51be1109386fd74c3a1&type=json&mid=${musicItem.songmid}`;\n \n try {\n const response = await (0, ($parcel$interopDefault($fFvhi$axios))).get(apiUrl, {\n headers: {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',\n 'Referer': 'https://y.qq.com'\n },\n timeout: 10000\n });\n\n if (!response.data || !response.data.url) {\n throw new Error('API\u54cd\u5e94\u4e2d\u6ca1\u6709\u6709\u6548\u7684URL');\n }\n\n return {\n url: response.data.url\n };\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u4e50URL\u5931\u8d25:', error.message);\n throw new Error(`\u83b7\u53d6\u64ad\u653e\u94fe\u63a5\u5931\u8d25: ${error.message}`);\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$search(query, page, type) {\n if (type === \"music\") return await $d25ff3d008f9e7e0$var$searchMusic(query, page);\n if (type === \"album\") return await $d25ff3d008f9e7e0$var$searchAlbum(query, page);\n if (type === \"artist\") return await $d25ff3d008f9e7e0$var$searchArtist(query, page);\n if (type === \"sheet\") return await $d25ff3d008f9e7e0$var$searchMusicSheet(query, page);\n if (type === \"lyric\") return await $d25ff3d008f9e7e0$var$searchLyric(query, page);\n}\nconst $d25ff3d008f9e7e0$var$pluginInstance = {\n platform: \"QQ(\u8fdf\u8a00\u63a5\u53e3)\",\n author: \"\u7af9\u4f40\",\n version: \"1\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E8%BF%9F%E8%A8%80QQ.js\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n primaryKey: [\n \"id\",\n \"songmid\"\n ],\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\",\n \"artist\",\n \"lyric\"\n ],\n search: $d25ff3d008f9e7e0$var$search,\n getMediaSource: $d25ff3d008f9e7e0$var$getMediaSource,\n getLyric: $d25ff3d008f9e7e0$var$getLyric,\n getAlbumInfo: $d25ff3d008f9e7e0$var$getAlbumInfo,\n getArtistWorks: $d25ff3d008f9e7e0$var$getArtistWorks,\n importMusicSheet: $d25ff3d008f9e7e0$var$importMusicSheet,\n getTopLists: $d25ff3d008f9e7e0$var$getTopLists,\n getTopListDetail: $d25ff3d008f9e7e0$var$getTopListDetail,\n getRecommendSheetTags: $d25ff3d008f9e7e0$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $d25ff3d008f9e7e0$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $d25ff3d008f9e7e0$var$getMusicSheetInfo\n};\nvar $d25ff3d008f9e7e0$export$2e2bcd8739ae039 = $d25ff3d008f9e7e0$var$pluginInstance;\n\n\n//# sourceMappingURL=xiaoqiu.js.map", "id": "msg_1789568441318"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 迟言QQ, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568441318: True [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 迟言QQ [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789568441619"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568441619: True [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗JHMS [2026-09-16 22:20:41] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:41] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u72d7JHMS", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/kg.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJs = require(\"crypto-js\");\nconst he = require(\"he\");\nconst pageSize = 20;\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n return {\n id: (_d = _.FileHash) !== null && _d !== void 0 ? _d : _.Grp[0].FileHash,\n title: (_a = _.SongName) !== null && _a !== void 0 ? _a : _.OriSongName,\n artist:\n (_b = _.SingerName) !== null && _b !== void 0 ? _b : _.Singers[0].name,\n album:\n (_c = _.AlbumName) !== null && _c !== void 0 ? _c : _.Grp[0].AlbumName,\n album_id:\n (_e = _.AlbumID) !== null && _e !== void 0 ? _e : _.Grp[0].AlbumID,\n album_audio_id: 0,\n duration: _.Duration,\n artwork: ((_f = _.Image) !== null && _f !== void 0\n ? _f\n : _.Grp[0].Image\n ).replace(\"{size}\", \"1080\"),\n \"320hash\": (_i = _.HQFileHash) !== null && _i !== void 0 ? _i : undefined,\n sqhash: (_g = _.SQFileHash) !== null && _g !== void 0 ? _g : undefined,\n ResFileHash:\n (_h = _.ResFileHash) !== null && _h !== void 0 ? _h : undefined,\n };\n}\nfunction formatMusicItem2(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: _.hash,\n title: _.songname,\n artist:\n (_a = _.singername) !== null && _a !== void 0\n ? _a\n : ((_c =\n (_b = _.authors) === null || _b === void 0\n ? void 0\n : _b.map((_) => {\n var _a;\n return (_a =\n _ === null || _ === void 0 ? void 0 : _.author_name) !==\n null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/kg\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n // url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=krc&charset=utf8`,\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n// copy from lxmusic https://github.com/lyswhut/lx-music-desktop/blob/master/src/renderer/utils/musicSdk/kg/lyric.js#L114\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\nmodule.exports = {\n platform: \"\u9177\u72d7JHMS\",\n version: \"0.1.0\",\n author: \"t.me/JHMS_Channel\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-cache\",\n description: \"\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789568441920"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗JHMS, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568441920: True [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗JHMS [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 种子 [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u79cd\u5b50", "code": "var $d9Bti$axios = require(\"axios\");\nvar $d9Bti$cheerio = require(\"cheerio\");\nvar $d9Bti$dayjs = require(\"dayjs\");\nvar $d9Bti$cryptojs = require(\"crypto-js\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $89bf7938ddf8e249$export$2e2bcd8739ae039);\n/** \u641c\u7d22\u65b9\u6cd5 */ \n\n\nfunction $60fd231faf899fd5$export$47fac120ab74ef02(word, sing) {\n const key = (0, ($parcel$interopDefault($d9Bti$cryptojs))).enc.Utf8.parse(sing);\n const iv = (0, ($parcel$interopDefault($d9Bti$cryptojs))).enc.Utf8.parse(\"k1y2a3b4r5t6c7q7\");\n var encrypted = (0, ($parcel$interopDefault($d9Bti$cryptojs))).AES.encrypt(word, key, {\n iv: iv,\n mode: (0, ($parcel$interopDefault($d9Bti$cryptojs))).mode.CBC,\n padding: (0, ($parcel$interopDefault($d9Bti$cryptojs))).pad.Pkcs7\n });\n var ciphertext = encrypted.ciphertext.toString((0, ($parcel$interopDefault($d9Bti$cryptojs))).enc.Hex);\n return ciphertext.toUpperCase();\n}\nasync function $60fd231faf899fd5$export$bd6d310eff940ae4(url, params) {\n //\u8bf7\u6c42\u51fd\u6570\n var html = (0, ($parcel$interopDefault($d9Bti$axios))).get(url, {\n params: params,\n headers: {\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\"\n }\n });\n return html;\n}\nfunction $60fd231faf899fd5$export$76cd2546cd31fda2(timeStr) {\n try {\n // \u5206\u79bb\u5c0f\u65f6\u548c\u5206\u949f\n const times = timeStr.split(\":\");\n if (times.length == 2) {\n const [minutes, second] = timeStr.split(\":\").map(Number);\n const minutesInSeconds = minutes * 60;\n return minutesInSeconds + second;\n } else if (times.length == 3) {\n const [hours, minutes, second] = timeStr.split(\":\").map(Number);\n const hoursInSeconds = minutes * 3600;\n const minutesInSeconds = minutes * 60;\n return hoursInSeconds + minutesInSeconds + second;\n }\n } catch (e) {\n return 0;\n }\n return 0;\n}\n\n\nfunction $5c617407703ff57c$export$d7bdacb66077735f(_) {\n return {\n id: _.id,\n platform: \"\u79cd\u5b50\",\n artist: _.sname,\n title: _.mname,\n album: _.pic,\n duration: (0, $60fd231faf899fd5$export$76cd2546cd31fda2)(_.play_time),\n artwork: _.pic,\n url: _.mp3\n };\n}\nfunction $5c617407703ff57c$export$ed1fb53032701881(_) {\n return {\n id: _.albumId ?? _.id,\n artist: _.nickname,\n title: _.title,\n artwork: _.coverPath?.startsWith(\"//\") ? `https:${_.coverPath}` : _.coverPath,\n description: _.intro ?? _.description,\n date: _.updatedAt ? (0, ($parcel$interopDefault($d9Bti$dayjs)))(_.updatedAt).format(\"YYYY-MM-DD\") : null\n };\n}\nfunction $5c617407703ff57c$export$d08aae127141ee12(_) {\n return {\n name: _.nickname,\n id: _.uid,\n fans: _.followersCount,\n description: _.description,\n avatar: _.logoPic,\n worksNum: _.tracksCount\n };\n}\nfunction $5c617407703ff57c$export$4141752cc74ed82e(_) {\n return {\n id: _.id,\n platform: \"\u5cb8\u542c\",\n artwork: _.coverImgUrl ?? _.pic,\n title: _.name,\n description: _.description,\n worksNum: _.trackCount\n };\n}\nfunction $5c617407703ff57c$export$fa5f2f9db37e5217(page, tag, first, list) {\n return {\n id: tag.id,\n artist: first.sname,\n title: first.mname,\n artwork: first.pic,\n musicList: list.map((_)=>{\n const r = $5c617407703ff57c$export$d7bdacb66077735f(_);\n return r;\n })\n };\n}\nfunction $5c617407703ff57c$export$4135fdd7029f141(raw) {\n return !raw.priceTypes?.length;\n}\nfunction $5c617407703ff57c$export$ed4cedad8375a67(raw) {\n return raw.tag === 0 || raw.isPaid === false || parseFloat(raw.price) === 0;\n}\n\n\n\nasync function $db56cb91f4576ed0$var$searchBase(query, page) {\n var html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"search\",\n key: query,\n lang: \"\"\n });\n var data = html.data;\n return data;\n}\nasync function $db56cb91f4576ed0$var$searchMusic(query, page) {\n var res = (await $db56cb91f4576ed0$var$searchBase(query, page)).data;\n return {\n isEnd: true,\n data: res.map((0, $5c617407703ff57c$export$d7bdacb66077735f))\n };\n}\nasync function $db56cb91f4576ed0$var$searchAlbum(query, page) {\n /*const res = (await searchBase(query, page, \"album\")).data.album;\n return {\n isEnd: true,\n data: res.map(formatMusicItem),\n };*/ return {\n isEnd: true,\n data: []\n };\n}\nasync function $db56cb91f4576ed0$var$searchArtist(query, page) {\n var res = (await $db56cb91f4576ed0$var$searchBase(query, page)).data;\n return {\n isEnd: true,\n data: res.filter((raw)=>raw.sname.include(query)).map((0, $5c617407703ff57c$export$d7bdacb66077735f))\n };\n}\nasync function $db56cb91f4576ed0$export$2e2bcd8739ae039(query, page, type) {\n if (type === \"music\") return $db56cb91f4576ed0$var$searchMusic(query, page);\n else if (type === \"album\") return $db56cb91f4576ed0$var$searchAlbum(query, page);\n else if (type === \"artist\") return $db56cb91f4576ed0$var$searchArtist(query, page);\n}\n\n\n\n\n\n\n/** \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5 */ async function $89bf7938ddf8e249$var$getAlbumInfo(albumItem, page = 1) {\n const res = await (0, ($parcel$interopDefault($d9Bti$axios))).get(\"https://www.ximalaya.com/revision/album/v1/getTracksList\", {\n params: {\n albumId: albumItem.id,\n pageNum: page,\n pageSize: 50\n }\n });\n return {\n isEnd: page * 50 >= res.data.data.trackTotalCount,\n albumItem: {\n worksNum: res.data.data.trackTotalCount\n },\n musicList: res.data.data.tracks.filter((0, $5c617407703ff57c$export$ed4cedad8375a67)).map((_)=>{\n const r = (0, $5c617407703ff57c$export$d7bdacb66077735f)(_);\n r.artwork = albumItem.artwork;\n r.artist = albumItem.artist;\n return r;\n })\n };\n}\n/** \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5 */ async function $89bf7938ddf8e249$var$getLyric(musicItem) {\n let html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"songinfo\",\n id: musicItem.id,\n lang: \"\"\n });\n const data = html.data.data;\n return {\n rawLrc: data.lrc\n };\n}\n/** \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5 */ async function $89bf7938ddf8e249$var$getMediaSource(musicItem, quality) {\n let html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"songinfo\",\n id: musicItem.id,\n lang: \"\"\n });\n const data = html.data.data;\n return {\n url: data.mp3,\n quality: quality\n };\n}\nasync function $89bf7938ddf8e249$var$getTopLists() {\n var result = [];\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com\", {});\n const $ = $d9Bti$cheerio.load(html.data);\n const tops = $(\".d-none .cate-list a\").get();\n var lists = [];\n for(var i in tops)lists.push({\n id: $(tops[i]).attr(\"href\").match(/\\/list\\/(\\w+)\\.htm/)[1],\n title: $(tops[i]).text()\n });\n result.push({\n title: \"\u79cd\u5b50\u97f3\u4e50\",\n data: lists\n });\n // return\n return result;\n}\nasync function $89bf7938ddf8e249$var$getTopListDetail(sheetItem, page = 1) {\n var result;\n result = {\n ...sheetItem\n };\n const id = sheetItem.id;\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: id,\n lang: \"\",\n page: 1\n });\n var list = html.data.data;\n result.musicList = list.map((_)=>{\n const r = (0, $5c617407703ff57c$export$d7bdacb66077735f)(_);\n return r;\n });\n const html2 = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: id,\n lang: \"\",\n page: 2\n });\n var list2 = html2.data.data;\n result.musicList = result.musicList.concat(list2.map((_)=>{\n const r = (0, $5c617407703ff57c$export$d7bdacb66077735f)(_);\n return r;\n }));\n return result;\n}\nasync function $89bf7938ddf8e249$var$getRecommendSheetTags() {\n var result = {};\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com\", {});\n const $ = $d9Bti$cheerio.load(html.data);\n const menus = $(\"ul.channel li\").get();\n var lists = [];\n for(var i in menus)lists.push({\n id: $(menus[i]).find(\"a\").attr(\"href\").match(/\\/list\\/(\\w+)\\.htm/)[1],\n title: $(menus[i]).find(\"a span\").text()\n });\n result.pinned = lists;\n var datas = [];\n datas.push({\n data: lists\n });\n result.data = datas;\n return result;\n}\nasync function $89bf7938ddf8e249$var$getRecommendSheetsByTag(tag, page) {\n var result = {};\n let size = 50;\n var datas = [];\n var num = 1;\n while(size == 50 && num <= 10){\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: tag.id || \"azz\",\n lang: \"\",\n page: (page - 1) * 10 + num\n });\n const list = html.data.data;\n if (list.length > 0) {\n const first = list[0];\n datas.push((0, $5c617407703ff57c$export$fa5f2f9db37e5217)(page, tag, first, list));\n }\n size = list.length;\n num++;\n if (num == 10 && size == 50) result.isEnd = false;\n }\n result.data = datas;\n return result;\n}\nasync function $89bf7938ddf8e249$var$getMusicSheetInfo(sheetItem, page) {\n var result = {};\n result.sheetItem = sheetItem;\n /* const html = await getHtml(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: sheetItem.id,\n lang: \"\",\n page: sheetItem.page\n });\n const list = html.data.data;*/ result.musicList = sheetItem.musicList;\n result.isEnd = true;\n return result;\n}\nconst $89bf7938ddf8e249$var$pluginInstance = {\n platform: \"\u79cd\u5b50\",\n version: \"0.1.0\",\n author: \"SoEasy\u540c\u5b66\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/zz.js\",\n supportedSearchType: [\n \"music\",\n \"album\",\n \"artist\"\n ],\n search: $db56cb91f4576ed0$export$2e2bcd8739ae039,\n getMediaSource: $89bf7938ddf8e249$var$getMediaSource,\n getLyric: $89bf7938ddf8e249$var$getLyric,\n getTopLists: // getAlbumInfo, // \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n // getArtistWorks, // \u83b7\u53d6\u4f5c\u8005\u4fe1\u606f\n $89bf7938ddf8e249$var$getTopLists,\n getTopListDetail: $89bf7938ddf8e249$var$getTopListDetail,\n getRecommendSheetTags: $89bf7938ddf8e249$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $89bf7938ddf8e249$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $89bf7938ddf8e249$var$getMusicSheetInfo\n};\n/*search(\"\u7ae5\u8bdd\u9547\", 1, \"music\").then((res) => {\n console.log(res)\n getMediaSource(res.data[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.data[0]).then((res) => {\n console.log(res)\n })\n})*/ /*getRecommendSheetTags().then((res) => {\n console.log(res)\n getRecommendSheetsByTag(res.pinned[0], 1).then((res) => {\n console.log(res)\n getMusicSheetInfo(res.data[0], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.musicList[0]).then((res) => {\n console.log(res)\n })\n })\n })\n})*/ $89bf7938ddf8e249$var$getTopLists().then((res)=>{\n console.log(res);\n $89bf7938ddf8e249$var$getTopListDetail(res[0].data[0]).then((res)=>{\n console.log(res);\n $89bf7938ddf8e249$var$getMediaSource(res.musicList[0], \"standard\").then((res)=>{\n console.log(res);\n });\n $89bf7938ddf8e249$var$getLyric(res.musicList[0]).then((res)=>{\n console.log(res);\n });\n });\n});\nvar $89bf7938ddf8e249$export$2e2bcd8739ae039 = $89bf7938ddf8e249$var$pluginInstance;\n\n\n//# sourceMappingURL=zz.js.map", "id": "msg_1789568442222"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 种子, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568442222: True [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 种子 [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小枸音乐 [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5c0f\u67b8\u97f3\u4e50", "code": "var $hTj9b$axios = require(\"axios\");\nvar $hTj9b$cheerio = require(\"cheerio\");\nvar $hTj9b$cryptojs = require(\"crypto-js\");\nvar $hTj9b$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $28c810e89c2349b3$export$2e2bcd8739ae039);\n\n\n\n\nconst $28c810e89c2349b3$var$pageSize = 20;\nfunction $28c810e89c2349b3$var$formatMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n return {\n id: (_d = _.FileHash) !== null && _d !== void 0 ? _d : _.Grp[0].FileHash,\n title: (_a = _.SongName) !== null && _a !== void 0 ? _a : _.OriSongName,\n artist: (_b = _.SingerName) !== null && _b !== void 0 ? _b : _.Singers[0].name,\n album: (_c = _.AlbumName) !== null && _c !== void 0 ? _c : _.Grp[0].AlbumName,\n album_id: (_e = _.AlbumID) !== null && _e !== void 0 ? _e : _.Grp[0].AlbumID,\n album_audio_id: 0,\n duration: _.Duration,\n artwork: ((_f = _.Image) !== null && _f !== void 0 ? _f : _.Grp[0].Image).replace(\"{size}\", \"1080\"),\n \"320hash\": (_i = _.HQFileHash) !== null && _i !== void 0 ? _i : undefined,\n sqhash: (_g = _.SQFileHash) !== null && _g !== void 0 ? _g : undefined,\n ResFileHash: (_h = _.ResFileHash) !== null && _h !== void 0 ? _h : undefined\n };\n}\nfunction $28c810e89c2349b3$var$formatMusicItem2(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: _.hash,\n title: _.songname,\n artist: (_a = _.singername) !== null && _a !== void 0 ? _a : ((_c = (_b = _.authors) === null || _b === void 0 ? void 0 : _b.map((_)=>{\n var _a;\n return (_a = _ === null || _ === void 0 ? void 0 : _.author_name) !== null && _a !== void 0 ? _a : \"\";\n })) === null || _c === void 0 ? void 0 : _c.join(\", \")) || ((_f = (_e = (_d = _.filename) === null || _d === void 0 ? void 0 : _d.split(\"-\")) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover ? _.album_sizable_cover.replace(\"{size}\", \"400\") : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash\n };\n}\nfunction $28c810e89c2349b3$var$formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) title = (_a = title.substring(index + singerName.length + 2)) === null || _a === void 0 ? void 0 : _a.trim();\n if (!title) title = singerName;\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title: title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: (_d = (_c = _ === null || _ === void 0 ? void 0 : _.info) === null || _c === void 0 ? void 0 : _c.image) === null || _d === void 0 ? void 0 : _d.replace(\"{size}\", \"400\"),\n \"320hash\": (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) === null || _e === void 0 ? void 0 : _e.hash,\n sqhash: (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) === null || _f === void 0 ? void 0 : _f.hash,\n origin_hash: (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) === null || _g === void 0 ? void 0 : _g.hash\n };\n}\nconst $28c810e89c2349b3$var$headers = {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\"\n};\nasync function $28c810e89c2349b3$var$searchMusic(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1\n }\n })).data;\n const songs = res.data.lists.map($28c810e89c2349b3$var$formatMusicItem);\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: songs\n };\n}\nasync function $28c810e89c2349b3$var$searchAlbum(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page: page,\n sver: 2,\n with_res_tag: 0\n }\n })).data;\n const albums = res.data.info.map((_)=>{\n var _a, _b;\n return {\n id: _.albumid,\n artwork: (_a = _.imgurl) === null || _a === void 0 ? void 0 : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, $hTj9b$cheerio.load)(_.albumname).text(),\n description: _.intro,\n date: (_b = _.publishtime) === null || _b === void 0 ? void 0 : _b.slice(0, 10)\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums\n };\n}\nasync function $28c810e89c2349b3$var$searchMusicSheet(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdn.kugou.com/api/v3/search/special\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n format: \"json\",\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n showtype: 1\n }\n })).data;\n const sheets = res.data.info.map((item)=>({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount\n }));\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: sheets\n };\n}\nconst $28c810e89c2349b3$var$qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"flac24bit\"\n};\nasync function $28c810e89c2349b3$var$getMediaSource(musicItem, quality) {\n let url = \"\";\n // https://m.kugou.com/mixsong/j2ss6c1.html\n // const paramUrl = \"http://110.42.38.239:1314/url/kg/\" + musicItem.id + \"/\" + qualityLevels[quality];\n const res1 = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(`https://lxmusicapi.onrender.com/url/kg/${musicItem.id}/${$28c810e89c2349b3$var$qualityLevels[quality]}`, {\n headers: {\n \"X-Request-Key\": \"share-v2\"\n }\n })).data;\n if (!res1.url || res1.msg != \"success\") {\n const res2 = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(`https://lxmusicapi.onrender.com/url/kg/${musicItem.id}/${$28c810e89c2349b3$var$qualityLevels[quality]}`, {\n headers: {\n \"X-Request-Key\": \"share-v2\"\n }\n })).data;\n if (!res2.url || res2.msg != \"success\") ;\n else url = res2.url;\n } else url = res1.url;\n return {\n url: url\n };\n}\nasync function $28c810e89c2349b3$var$getTopLists() {\n const lists = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\", {\n headers: $28c810e89c2349b3$var$headers\n })).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: []\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: []\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: []\n }\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: []\n };\n lists.forEach((item)=>{\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_a = item.imgurl) === null || _a === void 0 ? void 0 : _a.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else if (item.classify === 3 || item.classify === 5) res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_b = item.imgurl) === null || _b === void 0 ? void 0 : _b.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else if (item.classify === 4) res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_c = item.imgurl) === null || _c === void 0 ? void 0 : _c.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_d = item.imgurl) === null || _d === void 0 ? void 0 : _d.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n });\n if (extra.data.length !== 0) res.push(extra);\n return res;\n}\nasync function $28c810e89c2349b3$var$getTopListDetail(topListItem) {\n const res = await (0, ($parcel$interopDefault($hTj9b$axios))).get(`http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`, {\n headers: $28c810e89c2349b3$var$headers\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map($28c810e89c2349b3$var$formatMusicItem2)\n });\n}\nasync function $28c810e89c2349b3$var$getLyricDownload(lyrdata) {\n const result = (await (0, ($parcel$interopDefault($hTj9b$axios)))({\n // url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=krc&charset=utf8`,\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n rawLrc: (0, ($parcel$interopDefault($hTj9b$he))).decode((0, ($parcel$interopDefault($hTj9b$cryptojs))).enc.Base64.parse(result.content).toString((0, ($parcel$interopDefault($hTj9b$cryptojs))).enc.Utf8))\n };\n}\n// copy from lxmusic https://github.com/lyswhut/lx-music-desktop/blob/master/src/renderer/utils/musicSdk/kg/lyric.js#L114\nasync function $28c810e89c2349b3$var$getLyric(musicItem) {\n const result = (await (0, ($parcel$interopDefault($hTj9b$axios)))({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const info = result.candidates[0];\n return await $28c810e89c2349b3$var$getLyricDownload({\n id: info.id,\n accessKey: info.accesskey\n });\n}\nasync function $28c810e89c2349b3$var$getAlbumInfo(albumItem, page = 1) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page: page,\n with_res_tag: 0\n }\n })).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total\n },\n musicList: res.data.info.map((_)=>{\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id\n };\n })\n };\n}\nasync function $28c810e89c2349b3$var$importMusicSheet(urlLike) {\n var _a;\n let id = (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0 ? void 0 : _a[1];\n let musicList = [];\n if (!id) return;\n let res = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`, {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count\n }\n });\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song)=>{\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\"\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource: resource,\n token: \"\",\n userid: \"0\",\n vip: 0\n };\n var result = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`, postData, {\n headers: {\n \"x-router\": \"media.store.kugou.com\"\n }\n });\n if (response.status === 200 && response.data.status === 1) musicList = result.data.data.map($28c810e89c2349b3$var$formatImportMusicItem);\n }\n }\n return musicList;\n}\nasync function $28c810e89c2349b3$var$search(query, page, type) {\n if (type === \"music\") return await $28c810e89c2349b3$var$searchMusic(query, page);\n else if (type === \"album\") return await $28c810e89c2349b3$var$searchAlbum(query, page);\n else if (type === \"sheet\") return await $28c810e89c2349b3$var$searchMusicSheet(query, page);\n}\nconst $28c810e89c2349b3$var$pluginInstance = {\n platform: \"\u5c0f\u67b8\u97f3\u4e50\",\n author: \"SoEasy\u540c\u5b66\",\n version: \"0.0.3\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/xiaogou.js\",\n cacheControl: \"no-cache\",\n primaryKey: [\n \"id\",\n \"album_id\",\n \"album_audio_id\"\n ],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\"\n ],\n search: $28c810e89c2349b3$var$search,\n getMediaSource: $28c810e89c2349b3$var$getMediaSource,\n getTopLists: $28c810e89c2349b3$var$getTopLists,\n getLyric: $28c810e89c2349b3$var$getLyric,\n getTopListDetail: $28c810e89c2349b3$var$getTopListDetail,\n getAlbumInfo: $28c810e89c2349b3$var$getAlbumInfo,\n importMusicSheet: $28c810e89c2349b3$var$importMusicSheet\n};\n$28c810e89c2349b3$var$search(\"\u7ae5\u8bdd\u9547\", 1, \"music\").then((res)=>{\n console.log(res);\n $28c810e89c2349b3$var$getMediaSource(res.data[0], \"standard\").then((res)=>{\n console.log(res);\n });\n $28c810e89c2349b3$var$getLyric(res.data[0]).then((res)=>{\n console.log(res);\n });\n});\nvar $28c810e89c2349b3$export$2e2bcd8739ae039 = $28c810e89c2349b3$var$pluginInstance;\n\n\n//# sourceMappingURL=xiaogou.js.map", "id": "msg_1789568442523"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 小枸音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568442523: True [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 小枸音乐 [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 西瓜糖QQ [2026-09-16 22:20:42] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u897f\u74dc\u7cd6QQ", "code": "const CONFIG = {\n apiKey: \"78ba562b6b7de94edb2f4465f1a2a1feaffe9878e3b98385c4d7e7b4cf98a524\",\n enableCustomAPI: true,\n debugMode: false,\n requestTimeout: 10000,\n maxRetryCount: 3,\n qualityPriority: [\"super\", \"high\", \"standard\", \"low\"]\n};\n\nvar $fFvhi$axios = require(\"axios\");\nvar $fFvhi$cryptojs = require(\"crypto-js\");\nvar $fFvhi$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $d25ff3d008f9e7e0$export$2e2bcd8739ae039);\n\nconst $d25ff3d008f9e7e0$var$pageSize = 20;\n\nfunction $d25ff3d008f9e7e0$var$getApiKey() {\n if (CONFIG.apiKey && CONFIG.apiKey.trim() !== \"\") {\n return CONFIG.apiKey;\n }\n \n if (typeof env !== 'undefined' && env.getUserVariables) {\n const vars = env.getUserVariables();\n return (vars && vars.apiKey) || \"\";\n }\n \n if (typeof window !== 'undefined' && window.pluginConfigs && window.pluginConfigs.qqmusic && window.pluginConfigs.qqmusic.apiKey) {\n return window.pluginConfigs.qqmusic.apiKey;\n }\n \n return \"\";\n}\n\nfunction $d25ff3d008f9e7e0$var$formatMusicItem(_) {\n var _a, _b, _c;\n const albumid = _.albumid || ((_a = _.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid = _.albummid || ((_b = _.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname = _.albumname || ((_c = _.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: _.id || _.songid,\n songmid: _.mid || _.songmid,\n title: _.title || _.songname,\n artist: _.singer.map((s)=>s.name).join(\", \"),\n artwork: albummid ? `https://y.gtimg.cn/music/photo_new/T002R800x800M000${albummid}.jpg` : undefined,\n album: albumname,\n albumid: albumid,\n albummid: albummid\n };\n}\n\nfunction $d25ff3d008f9e7e0$var$formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork: _.albumPic || `https://y.gtimg.cn/music/photo_new/T002R800x800M000${_.albumMID || _.album_mid}.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc\n };\n}\n\nfunction $d25ff3d008f9e7e0$var$formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum\n };\n}\n\nconst $d25ff3d008f9e7e0$var$searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\"\n};\n\nconst $d25ff3d008f9e7e0$var$headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\"\n};\n\nasync function $d25ff3d008f9e7e0$var$getMusicInfoFromCustomAPI(songmid) {\n const apiKey = $d25ff3d008f9e7e0$var$getApiKey();\n \n if (!apiKey || apiKey.trim() === \"\") {\n throw new Error(\"\u8bf7\u5148\u5728\u7528\u6237\u53d8\u91cf\u4e2d\u914d\u7f6eAPI\u5bc6\u94a5\");\n }\n \n try {\n const url = `https://api.nki.pw/API/music_open_api.php?apikey=${encodeURIComponent(apiKey)}&mid=${songmid}`;\n const response = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"GET\",\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\"\n }\n });\n \n if (response.data && response.data.song_mid) {\n return response.data;\n }\n throw new Error(\"API\u54cd\u5e94\u6570\u636e\u683c\u5f0f\u9519\u8bef\");\n } catch (error) {\n throw new Error(`API\u8bf7\u6c42\u5931\u8d25: ${error.message}`);\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$searchBase(query, page, type) {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: $d25ff3d008f9e7e0$var$pageSize,\n page_num: page,\n query: query,\n search_type: type\n }\n }\n },\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.req_1.data.body[$d25ff3d008f9e7e0$var$searchTypeMap[type]].list\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchMusic(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchAlbum(query, page) {\n const albums = await $d25ff3d008f9e7e0$var$searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchArtist(query, page) {\n const artists = await $d25ff3d008f9e7e0$var$searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map($d25ff3d008f9e7e0$var$formatArtistItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchMusicSheet(query, page) {\n const musicSheet = await $d25ff3d008f9e7e0$var$searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item)=>({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name\n }))\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchLyric(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it)=>Object.assign(Object.assign({}, $d25ff3d008f9e7e0$var$formatMusicItem(it)), {\n rawLrcTxt: it.content\n }))\n };\n}\n\nfunction $d25ff3d008f9e7e0$var$getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) s = sArr[1];\n else return key ? undefined : {};\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item)=>{\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n } catch (err) {\n return key ? \"\" : {};\n }\n}\n\nfunction $d25ff3d008f9e7e0$var$changeUrlQuery(obj, baseUrl) {\n const query = $d25ff3d008f9e7e0$var$getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key)=>{\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\n\nasync function $d25ff3d008f9e7e0$var$getAlbumInfo(albumItem) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2\n },\n module: \"music.musichallAlbum.AlbumSongList\"\n }\n })\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n musicList: res.albumSonglist.data.songList.map((item)=>{\n const _ = item.songInfo;\n return $d25ff3d008f9e7e0$var$formatMusicItem(_);\n })\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singer.data.total_song <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singer.data.songlist.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize / 1,\n exstatus: 1\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singerAlbum.data.list.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getArtistWorks(artistItem, page, type) {\n if (type === \"music\") return $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page);\n if (type === \"album\") return $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page);\n}\n\nasync function $d25ff3d008f9e7e0$var$getLyric(musicItem) {\n try {\n const apiData = await $d25ff3d008f9e7e0$var$getMusicInfoFromCustomAPI(musicItem.songmid);\n \n if (apiData.song_lyric) {\n return {\n rawLrc: apiData.song_lyric,\n translation: apiData.lyric || \"\"\n };\n }\n \n throw new Error(\"API\u672a\u8fd4\u56de\u6b4c\u8bcd\");\n } catch (error) {\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid}&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: {\n Referer: \"https://y.qq.com\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n let translation;\n if (res.trans) translation = (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.trans).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8));\n return {\n rawLrc: (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.lyric).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8)),\n translation: translation\n };\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$importMusicSheet(urlLike) {\n let id;\n if (!id) id = (urlLike.match(/https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id) return;\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://i.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: {\n Referer: \"https://y.qq.com/n/yqq/playlist\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n return res.cdlist[0].songlist.map($d25ff3d008f9e7e0$var$formatMusicItem);\n}\n\nasync function $d25ff3d008f9e7e0$var$getTopLists() {\n const list = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return list.data.topList.data.group.map((e)=>({\n title: e.groupName,\n data: e.toplist.map((_)=>({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl\n }))\n }));\n}\n\nasync function $d25ff3d008f9e7e0$var$getTopListDetail(topListItem) {\n var _a;\n const res = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id}%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"}%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList.map($d25ff3d008f9e7e0$var$formatMusicItem)\n });\n}\n\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetTags() {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\", {\n headers: {\n referer: \"https://y.qq.com/\"\n }\n })).data.data.categories;\n const data = res.slice(1).map((_)=>({\n title: _.categoryGroupName,\n data: _.items.map((tag)=>({\n id: tag.categoryId,\n title: tag.categoryName\n }))\n }));\n const pinned = [];\n for (let d of data)if (d.data.length) pinned.push(d.data[0]);\n return {\n pinned: pinned,\n data: data\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\", {\n headers: {\n referer: \"https://y.qq.com/\"\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId: (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1\n }\n })).data;\n const res = JSON.parse(rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item)=>{\n var _a, _b;\n return {\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist: (_b = (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"\"\n };\n });\n return {\n isEnd: isEnd,\n data: data\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getMusicSheetInfo(sheet, page) {\n const data = await $d25ff3d008f9e7e0$var$importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data\n };\n}\n\nconst $d25ff3d008f9e7e0$var$qualityMap = {\n low: \"standard\",\n standard: \"standard\",\n high: \"sq\",\n super: \"sq\"\n};\n\nasync function $d25ff3d008f9e7e0$var$getMediaSource(musicItem, quality) {\n const apiKey = $d25ff3d008f9e7e0$var$getApiKey();\n \n if (!apiKey || apiKey.trim() === \"\") {\n throw new Error(\"\u8bf7\u5148\u5728\u7528\u6237\u53d8\u91cf\u4e2d\u914d\u7f6eAPI\u5bc6\u94a5\");\n }\n \n try {\n const apiData = await $d25ff3d008f9e7e0$var$getMusicInfoFromCustomAPI(musicItem.songmid);\n \n let playUrl;\n const qualityLevel = $d25ff3d008f9e7e0$var$qualityMap[quality] || \"standard\";\n \n if (qualityLevel === \"sq\" && apiData.song_play_url_sq) {\n playUrl = apiData.song_play_url_sq;\n } else if (apiData.song_play_url) {\n playUrl = apiData.song_play_url;\n } else {\n throw new Error(\"\u672a\u627e\u5230\u5bf9\u5e94\u97f3\u8d28\u7684\u64ad\u653e\u94fe\u63a5\");\n }\n \n if (!playUrl || playUrl.trim() === \"\") {\n throw new Error(\"\u64ad\u653e\u94fe\u63a5\u4e3a\u7a7a\");\n }\n \n return {\n url: playUrl,\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n \"Referer\": \"https://y.qq.com/\"\n }\n };\n } catch (error) {\n throw new Error(`\u83b7\u53d6\u97f3\u4e50\u6e90\u5931\u8d25: ${error.message}`);\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$search(query, page, type) {\n if (type === \"music\") return await $d25ff3d008f9e7e0$var$searchMusic(query, page);\n if (type === \"album\") return await $d25ff3d008f9e7e0$var$searchAlbum(query, page);\n if (type === \"artist\") return await $d25ff3d008f9e7e0$var$searchArtist(query, page);\n if (type === \"sheet\") return await $d25ff3d008f9e7e0$var$searchMusicSheet(query, page);\n if (type === \"lyric\") return await $d25ff3d008f9e7e0$var$searchLyric(query, page);\n}\n\nconst $d25ff3d008f9e7e0$var$pluginInstance = {\n platform: \"\u897f\u74dc\u7cd6(Q\u97f3)\",\n author: \"\u73a5\u7136OvO\",\n version: \"1\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E8%A5%BF%E7%93%9C%E7%B3%96QQ.js\",\n cacheControl: \"no-cache\",\n \n userVariables: [\n {\n key: \"apiKey\",\n name: \"API\u5bc6\u94a5\",\n hint: \"\u8bf7\u8f93\u5165\u81ea\u5b9a\u4e49API\u7684\u5bc6\u94a5\uff0c\u83b7\u53d6\u5730\u5740\uff1ahttps://api.nki.pw\"\n }\n ],\n \n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n primaryKey: [\n \"id\",\n \"songmid\"\n ],\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\",\n \"artist\",\n \"lyric\"\n ],\n search: $d25ff3d008f9e7e0$var$search,\n getMediaSource: $d25ff3d008f9e7e0$var$getMediaSource,\n getLyric: $d25ff3d008f9e7e0$var$getLyric,\n getAlbumInfo: $d25ff3d008f9e7e0$var$getAlbumInfo,\n getArtistWorks: $d25ff3d008f9e7e0$var$getArtistWorks,\n importMusicSheet: $d25ff3d008f9e7e0$var$importMusicSheet,\n getTopLists: $d25ff3d008f9e7e0$var$getTopLists,\n getTopListDetail: $d25ff3d008f9e7e0$var$getTopListDetail,\n getRecommendSheetTags: $d25ff3d008f9e7e0$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $d25ff3d008f9e7e0$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $d25ff3d008f9e7e0$var$getMusicSheetInfo\n};\n\nvar $d25ff3d008f9e7e0$export$2e2bcd8739ae039 = $d25ff3d008f9e7e0$var$pluginInstance;\n\n//# sourceMappingURL=qqmusic.js.map", "id": "msg_1789568442825"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:42] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 西瓜糖QQ, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568442825: True [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 西瓜糖QQ [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:43] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789568443126"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:43] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568443126: True [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:43] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789568443428"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:43] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568443428: True [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_竹玥 [2026-09-16 22:20:43] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:43] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u72d7_\u7af9\u73a5", "code": "var $hTj9b$axios = require(\"axios\");\nvar $hTj9b$cheerio = require(\"cheerio\");\nvar $hTj9b$cryptojs = require(\"crypto-js\");\nvar $hTj9b$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $28c810e89c2349b3$export$2e2bcd8739ae039);\n\nconst $28c810e89c2349b3$var$pageSize = 20;\n\nfunction $28c810e89c2349b3$var$formatMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n return {\n id: (_d = _.FileHash) !== null && _d !== void 0 ? _d : _.Grp[0].FileHash,\n title: (_a = _.SongName) !== null && _a !== void 0 ? _a : _.OriSongName,\n artist: (_b = _.SingerName) !== null && _b !== void 0 ? _b : _.Singers[0].name,\n album: (_c = _.AlbumName) !== null && _c !== void 0 ? _c : _.Grp[0].AlbumName,\n album_id: (_e = _.AlbumID) !== null && _e !== void 0 ? _e : _.Grp[0].AlbumID,\n album_audio_id: 0,\n duration: _.Duration,\n artwork: ((_f = _.Image) !== null && _f !== void 0 ? _f : _.Grp[0].Image).replace(\"{size}\", \"1080\"),\n \"320hash\": (_i = _.HQFileHash) !== null && _i !== void 0 ? _i : undefined,\n sqhash: (_g = _.SQFileHash) !== null && _g !== void 0 ? _g : undefined,\n ResFileHash: (_h = _.ResFileHash) !== null && _h !== void 0 ? _h : undefined\n };\n}\n\nfunction $28c810e89c2349b3$var$formatMusicItem2(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: _.hash,\n title: _.songname,\n artist: (_a = _.singername) !== null && _a !== void 0 ? _a : ((_c = (_b = _.authors) === null || _b === void 0 ? void 0 : _b.map((_)=>{\n var _a;\n return (_a = _ === null || _ === void 0 ? void 0 : _.author_name) !== null && _a !== void 0 ? _a : \"\";\n })) === null || _c === void 0 ? void 0 : _c.join(\", \")) || ((_f = (_e = (_d = _.filename) === null || _d === void 0 ? void 0 : _d.split(\"-\")) === null || _e === void 0 ? void 0 : _e[0]) === null || _f !== void 0 ? _f : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover ? _.album_sizable_cover.replace(\"{size}\", \"400\") : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash\n };\n}\n\nfunction $28c810e89c2349b3$var$formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) title = (_a = title.substring(index + singerName.length + 2)) === null || _a === void 0 ? void 0 : _a.trim();\n if (!title) title = singerName;\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title: title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: (_d = (_c = _ === null || _ === void 0 ? void 0 : _.info) === null || _c === void 0 ? void 0 : _c.image) === null || _d === void 0 ? void 0 : _d.replace(\"{size}\", \"400\"),\n \"320hash\": (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) === null || _e === void 0 ? void 0 : _e.hash,\n sqhash: (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) === null || _f === void 0 ? void 0 : _f.hash,\n origin_hash: (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) === null || _g === void 0 ? void 0 : _g.hash\n };\n}\n\nconst $28c810e89c2349b3$var$headers = {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\"\n};\n\nasync function $28c810e89c2349b3$var$searchMusic(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1\n }\n })).data;\n const songs = res.data.lists.map($28c810e89c2349b3$var$formatMusicItem);\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: songs\n };\n}\n\nasync function $28c810e89c2349b3$var$searchAlbum(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page: page,\n sver: 2,\n with_res_tag: 0\n }\n })).data;\n const albums = res.data.info.map((_)=>{\n var _a, _b;\n return {\n id: _.albumid,\n artwork: (_a = _.imgurl) === null || _a === void 0 ? void 0 : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, $hTj9b$cheerio.load)(_.albumname).text(),\n description: _.intro,\n date: (_b = _.publishtime) === null || _b === void 0 ? void 0 : _b.slice(0, 10)\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums\n };\n}\n\nasync function $28c810e89c2349b3$var$searchMusicSheet(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdn.kugou.com/api/v3/search/special\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n format: \"json\",\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n showtype: 1\n }\n })).data;\n const sheets = res.data.info.map((item)=>({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount\n }));\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: sheets\n };\n}\n\nconst $28c810e89c2349b3$var$qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"flac24bit\"\n};\n\nconst $28c810e89c2349b3$var$sha256 = (function() {\n \"use strict\";\n var HEX_CHARS = '0123456789abcdef'.split('');\n \n function Sha256() {\n this.blocks = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\n this.h0 = 0x6a09e667;\n this.h1 = 0xbb67ae85;\n this.h2 = 0x3c6ef372;\n this.h3 = 0xa54ff53a;\n this.h4 = 0x510e527f;\n this.h5 = 0x9b05688c;\n this.h6 = 0x1f83d9ab;\n this.h7 = 0x5be0cd19;\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n Sha256.prototype.update = function(message) {\n if (this.finalized) return;\n \n var notString = typeof message !== 'string';\n var blocks = this.blocks;\n \n for (var i = 0; i < message.length; i++) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = \n blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = \n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n \n var code = notString ? message[i] : message.charCodeAt(i);\n blocks[this.start >> 2] |= code << (24 - (this.start % 4) * 8);\n this.start++;\n \n if (this.start === 64) {\n this.block = blocks[16];\n this.start = 0;\n this.hash();\n this.hashed = true;\n }\n }\n \n this.bytes += message.length;\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha256.prototype.finalize = function() {\n if (this.finalized) return;\n this.finalized = true;\n \n var blocks = this.blocks;\n var i = this.start;\n blocks[16] = this.block;\n blocks[i >> 2] |= 0x80 << (24 - (i % 4) * 8);\n this.block = blocks[16];\n \n if (i >= 56) {\n if (!this.hashed) this.hash();\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] = blocks[4] = blocks[5] = \n blocks[6] = blocks[7] = blocks[8] = blocks[9] = blocks[10] = blocks[11] = \n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n \n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha256.prototype.hash = function() {\n var K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,\n 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,\n 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,\n 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,\n 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ];\n \n var a = this.h0, b = this.h1, c = this.h2, d = this.h3,\n e = this.h4, f = this.h5, g = this.h6, h = this.h7,\n blocks = this.blocks;\n \n for (var j = 0; j < 64; j++) {\n if (j >= 16) {\n var w0 = blocks[j - 15];\n var w1 = blocks[j - 2];\n var s0 = ((w0 >>> 7) | (w0 << 25)) ^ ((w0 >>> 18) | (w0 << 14)) ^ (w0 >>> 3);\n var s1 = ((w1 >>> 17) | (w1 << 15)) ^ ((w1 >>> 19) | (w1 << 13)) ^ (w1 >>> 10);\n blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1;\n }\n \n var S1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\n var ch = (e & f) ^ ((~e) & g);\n var temp1 = h + S1 + ch + K[j] + (blocks[j] >>> 0);\n var S0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\n var maj = (a & b) ^ (a & c) ^ (b & c);\n var temp2 = S0 + maj;\n \n h = g;\n g = f;\n f = e;\n e = (d + temp1) >>> 0;\n d = c;\n c = b;\n b = a;\n a = (temp1 + temp2) >>> 0;\n }\n \n this.h0 = (this.h0 + a) >>> 0;\n this.h1 = (this.h1 + b) >>> 0;\n this.h2 = (this.h2 + c) >>> 0;\n this.h3 = (this.h3 + d) >>> 0;\n this.h4 = (this.h4 + e) >>> 0;\n this.h5 = (this.h5 + f) >>> 0;\n this.h6 = (this.h6 + g) >>> 0;\n this.h7 = (this.h7 + h) >>> 0;\n };\n\n Sha256.prototype.hex = function() {\n this.finalize();\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3,\n h4 = this.h4, h5 = this.h5, h6 = this.h6, h7 = this.h7;\n \n return HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +\n HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +\n HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +\n HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +\n HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +\n HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +\n HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +\n HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +\n HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F] +\n HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +\n HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +\n HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +\n HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];\n };\n\n return function(message) {\n return new Sha256().update(message).hex();\n };\n})();\n\nconst $28c810e89c2349b3$var$API_URL = \"https://88.lxmusic.xn--fiqs8s\";\nconst $28c810e89c2349b3$var$API_KEY = \"lxmusic\";\nconst $28c810e89c2349b3$var$SCRIPT_MD5 = \"1888f9865338afe6d5534b35171c61a4\";\nconst $28c810e89c2349b3$var$SECRET_KEY = 'JaJ?a7Nwk_Fgj?2o:znAkst';\n\nconst $28c810e89c2349b3$var$generateSign = (requestPath) => {\n return $28c810e89c2349b3$var$sha256(requestPath + $28c810e89c2349b3$var$SCRIPT_MD5 + $28c810e89c2349b3$var$SECRET_KEY);\n}\n\nasync function $28c810e89c2349b3$var$getMediaSource(musicItem, quality) {\n const targetQuality = $28c810e89c2349b3$var$qualityLevels[quality] || \"320k\";\n \n const requestPath = `/lxmusicv4/url/kg/${musicItem.id}/${targetQuality}`;\n \n const sign = $28c810e89c2349b3$var$generateSign(requestPath);\n \n const fullUrl = `${$28c810e89c2349b3$var$API_URL}${requestPath}?sign=${sign}`;\n \n try {\n const response = await (0, ($parcel$interopDefault($hTj9b$axios))).get(fullUrl, {\n headers: {\n 'accept': 'application/json',\n 'x-request-key': $28c810e89c2349b3$var$API_KEY,\n 'user-agent': 'lx-music-request/2.0.0'\n },\n timeout: 15000\n });\n \n const { data } = response;\n \n if (data && (data.code === 0 || data.code === 200)) {\n const musicUrl = data.data || data.url;\n if (musicUrl) {\n return {\n url: musicUrl\n };\n } else {\n throw new Error('API\u54cd\u5e94\u4e2d\u672a\u627e\u5230\u6709\u6548\u7684URL');\n }\n } else if (data && data.code) {\n switch(data.code) {\n case 1:\n throw new Error('IP\u88ab\u5c01\u7981');\n case 2:\n throw new Error(data.msg || '\u83b7\u53d6\u97f3\u4e50\u94fe\u63a5\u5931\u8d25');\n case 4:\n throw new Error('\u670d\u52a1\u5668\u5185\u90e8\u9519\u8bef');\n case 5:\n throw new Error('\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5');\n case 6:\n throw new Error('\u53c2\u6570\u9519\u8bef');\n default:\n throw new Error(data.msg || `API\u9519\u8bef (code: ${data.code})`);\n }\n } else {\n throw new Error('API\u8fd4\u56de\u65e0\u6548\u54cd\u5e94');\n }\n \n } catch (error) {\n if (error.response) {\n const status = error.response.status;\n if (status === 404) {\n throw new Error('API\u7aef\u70b9\u4e0d\u5b58\u5728');\n } else if (status >= 500) {\n throw new Error(`\u670d\u52a1\u5668\u9519\u8bef (${status})`);\n } else if (status === 403) {\n throw new Error('\u8bbf\u95ee\u88ab\u62d2\u7edd\uff0c\u8bf7\u68c0\u67e5API\u5bc6\u94a5');\n }\n } else if (error.request) {\n throw new Error('\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5\u7f51\u7edc\u8fde\u63a5');\n }\n throw new Error(`\u83b7\u53d6\u64ad\u653e\u94fe\u63a5\u5931\u8d25: ${error.message}`);\n }\n}\n\nasync function $28c810e89c2349b3$var$getTopLists() {\n const lists = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\", {\n headers: $28c810e89c2349b3$var$headers\n })).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: []\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: []\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: []\n }\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: []\n };\n lists.forEach((item)=>{\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_a = item.imgurl) === null || _a === void 0 ? void 0 : _a.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else if (item.classify === 3 || item.classify === 5) res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_b = item.imgurl) === null || _b === void 0 ? void 0 : _b.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else if (item.classify === 4) res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_c = item.imgurl) === null || _c === void 0 ? void 0 : _c.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_d = item.imgurl) === null || _d === void 0 ? void 0 : _d.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n });\n if (extra.data.length !== 0) res.push(extra);\n return res;\n}\n\nasync function $28c810e89c2349b3$var$getTopListDetail(topListItem) {\n const res = await (0, ($parcel$interopDefault($hTj9b$axios))).get(`http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`, {\n headers: $28c810e89c2349b3$var$headers\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map($28c810e89c2349b3$var$formatMusicItem2)\n });\n}\n\nasync function $28c810e89c2349b3$var$getLyricDownload(lyrdata) {\n const result = (await (0, ($parcel$interopDefault($hTj9b$axios)))({\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n rawLrc: (0, ($parcel$interopDefault($hTj9b$he))).decode((0, ($parcel$interopDefault($hTj9b$cryptojs))).enc.Base64.parse(result.content).toString((0, ($parcel$interopDefault($hTj9b$cryptojs))).enc.Utf8))\n };\n}\n\nasync function $28c810e89c2349b3$var$getLyric(musicItem) {\n const result = (await (0, ($parcel$interopDefault($hTj9b$axios)))({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const info = result.candidates[0];\n return await $28c810e89c2349b3$var$getLyricDownload({\n id: info.id,\n accessKey: info.accesskey\n });\n}\n\nasync function $28c810e89c2349b3$var$getAlbumInfo(albumItem, page = 1) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page: page,\n with_res_tag: 0\n }\n })).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total\n },\n musicList: res.data.info.map((_)=>{\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id\n };\n })\n };\n}\n\nasync function $28c810e89c2349b3$var$importMusicSheet(urlLike) {\n var _a;\n let id = (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0 ? void 0 : _a[1];\n let musicList = [];\n if (!id) return;\n let res = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`, {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count\n }\n });\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song)=>{\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\"\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource: resource,\n token: \"\",\n userid: \"0\",\n vip: 0\n };\n var result = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`, postData, {\n headers: {\n \"x-router\": \"media.store.kugou.com\"\n }\n });\n if (response.status === 200 && response.data.status === 1) musicList = result.data.data.map($28c810e89c2349b3$var$formatImportMusicItem);\n }\n }\n return musicList;\n}\n\nasync function $28c810e89c2349b3$var$search(query, page, type) {\n if (type === \"music\") return await $28c810e89c2349b3$var$searchMusic(query, page);\n else if (type === \"album\") return await $28c810e89c2349b3$var$searchAlbum(query, page);\n else if (type === \"sheet\") return await $28c810e89c2349b3$var$searchMusicSheet(query, page);\n}\n\nconst $28c810e89c2349b3$var$pluginInstance = {\n platform: \"\u9177\u72d7(\u72ec\u5bb6\u97f3\u6e90)\",\n author: \"\u7af9\u4f40\uff06\u73a5\u7136OvO\",\n version: \"4\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E7%8B%97_%E7%AB%B9%E7%8E%A5.js\",\n cacheControl: \"no-cache\",\n primaryKey: [\n \"id\",\n \"album_id\",\n \"album_audio_id\"\n ],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\"\n ],\n search: $28c810e89c2349b3$var$search,\n getMediaSource: $28c810e89c2349b3$var$getMediaSource,\n getTopLists: $28c810e89c2349b3$var$getTopLists,\n getLyric: $28c810e89c2349b3$var$getLyric,\n getTopListDetail: $28c810e89c2349b3$var$getTopListDetail,\n getAlbumInfo: $28c810e89c2349b3$var$getAlbumInfo,\n importMusicSheet: $28c810e89c2349b3$var$importMusicSheet\n};\n\nvar $28c810e89c2349b3$export$2e2bcd8739ae039 = $28c810e89c2349b3$var$pluginInstance;", "id": "msg_1789568443730"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:43] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗_竹玥, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568443730: True [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗_竹玥 [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 爱听 [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:44] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7231\u542c", "code": "var $1PmeY$cheerio = require(\"cheerio\");\nvar $1PmeY$axios = require(\"axios\");\nrequire(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $fb42a3116a5ee582$export$2e2bcd8739ae039);\n/** \u641c\u7d22\u65b9\u6cd5 */\nasync function $e498536cecf4b2de$export$c55fd7b1d7fa3710(raw_data, separator) {\n const $ = $1PmeY$cheerio.load(raw_data);\n const rawPlayList = $(\"div.play_list\").find(\"li\");\n var list = [];\n for(let i = 0; i < rawPlayList.length; i++){\n const item = $(rawPlayList[i]).find(\"a\");\n let id = $(item[0]).attr(\"href\").match(/\\/song\\/(.*?).html/)[1];\n let separatedText = $(item[0]).text().split(separator);\n let artist = separatedText[0] // \u901a\u8fc7\u5206\u9694\u7b26\u533a\u5206\u6b4c\u624b\u548c\u6b4c\u540d\n ;\n let title = separatedText[1] != \"\" ? separatedText[1] : separatedText[2];\n list.push({\n id: id,\n title: title,\n artist: artist\n });\n }\n return list;\n}\nasync function $e498536cecf4b2de$export$d88d07b680eb6fd1(html) {}\nasync function $e498536cecf4b2de$export$5f54ed25dd7fe25e(html) {\n const $ = $1PmeY$cheerio.load(html);\n const rawPlayList = $(\"div.ilingku_fl\").find(\"li\");\n const pageData = $(\"div.pagedata\").text();\n let topListArr = [];\n topListArr.push({\n id: \"new\",\n title: \"\u65b0\u6b4c\u699c\",\n description: \"\u6bcf\u65e5\u540c\u6b65\u5b98\u65b9\u6570\u636e\u3002\" + pageData\n }, {\n id: \"top\",\n title: \"\u98d9\u5347\u699c\",\n description: \"\u6bcf\u65e5\u540c\u6b65\u5b98\u65b9\u6570\u636e\u3002\" + pageData\n });\n for(let i = 0; i < rawPlayList.length; i++){\n const item = $(rawPlayList[i]).find(\"a\");\n let href = $(item[0]).attr(\"href\").match(/\\/list\\/(.*?).html/)[1];\n let title = $(item[0]).text();\n topListArr.push({\n id: href,\n title: title,\n description: \"\u6bcf\u65e5\u540c\u6b65\u5b98\u65b9\u6570\u636e\uff1a\" + pageData\n });\n }\n return topListArr;\n}\nfunction $e498536cecf4b2de$export$d7bdacb66077735f(_) {\n return {\n id: _.id,\n artist: _.artist,\n title: _.title,\n album: _.album,\n duration: _.duration,\n artwork: _.artwork\n };\n}\n\n\n\n\nconst $12b2041efbdef206$var$host = \"http://www.2t58.com\";\nasync function $12b2041efbdef206$var$searchMusic(query, page) {\n let keyword = encodeURIComponent(query);\n let serchUrl = $12b2041efbdef206$var$host + \"/so/\" + keyword + \"/\" + page + \".html\";\n let searchRes = (await (0, ($parcel$interopDefault($1PmeY$axios))).get(serchUrl)).data;\n const $ = $1PmeY$cheerio.load(searchRes);\n const total = $(\"div.play_list\").find(\"span\").text();\n var isEnd = true;\n let songList = await (0, $e498536cecf4b2de$export$c55fd7b1d7fa3710)(searchRes, \" - \");\n if (total !== \"\" && !isNaN(Number(total))) isEnd = Number(total) <= page * 68;\n const songs = songList.map((0, $e498536cecf4b2de$export$d7bdacb66077735f));\n return {\n isEnd: isEnd,\n data: songs\n };\n}\nasync function $12b2041efbdef206$var$searchAlbum(query, page) {\n /*const res = (await searchBase(query, page, \"album\")).data.album;\n return {\n isEnd: true,\n data: res.map(formatMusicItem),\n };*/ return {\n isEnd: true,\n data: []\n };\n}\nasync function $12b2041efbdef206$var$searchArtist(query, page) {\n /*var res = (await searchBase(query, page)).data;\n return {\n isEnd: true,\n data: res.filter((raw) => raw.sname.include(query)).map(formatMusicItem),\n };*/ return {\n isEnd: true,\n data: []\n };\n}\nasync function $12b2041efbdef206$export$2e2bcd8739ae039(query, page, type) {\n if (type === \"music\") return $12b2041efbdef206$var$searchMusic(query, page);\n else if (type === \"album\") return $12b2041efbdef206$var$searchAlbum(query, page);\n else if (type === \"artist\") return $12b2041efbdef206$var$searchArtist(query, page);\n}\n\n\n\n\n\n\nconst $fb42a3116a5ee582$var$host = \"http://www.2t58.com\";\nasync function $fb42a3116a5ee582$var$getLyric(musicItem) {\n let res = (await ($parcel$interopDefault($1PmeY$axios))({\n method: \"get\",\n url: $fb42a3116a5ee582$var$host + \"/plug/down.php?ac=music&lk=lrc&id=\" + musicItem.id,\n timeout: 10000\n })).data;\n res = res.replace(\"www.44h4.com\", \"\");\n res = res.replace(\"www.2t58.com\", \"\");\n res = res.replace(\"44h4\", \"****\"); //\u5c4f\u853d\u6b4c\u8bcd\u4e2d\u7684\u7f51\u7ad9\u4fe1\u606f\n res = res.replace(\"2t58\", \"****\");\n res = res.replace(\"\u6b22\u8fce\u6765\u8bbf\", \"\"); //\u5c4f\u853d\u6b4c\u8bcd\u4e2d\u7684\u7f51\u7ad9\u4fe1\u606f\n res = res.replace(\"\u7231\u542c\u97f3\u4e50\u7f51\", \"\"); //\u5c4f\u853d\u6b4c\u8bcd\u4e2d\u7684\u7f51\u7ad9\u4fe1\u606f\n return {\n rawLrc: res\n };\n}\nasync function $fb42a3116a5ee582$var$getTopLists() {\n const html = (await ($parcel$interopDefault($1PmeY$axios)).get($fb42a3116a5ee582$var$host + \"/list/top.html\")).data;\n let toplist = await (0, $e498536cecf4b2de$export$5f54ed25dd7fe25e)(html);\n return [\n {\n title: \"\u5b98\u65b9\u699c\u5355\",\n data: toplist.map((_)=>{\n return {\n id: _.id,\n title: _.title,\n description: _.description\n };\n })\n }\n ];\n}\nasync function $fb42a3116a5ee582$var$getTopListDetail(topListItem) {\n var res = {\n ...topListItem\n };\n var page = 1;\n var musicList = [];\n while(true){\n let urlSerch = $fb42a3116a5ee582$var$host + \"/list/\" + topListItem.id + \"/\" + page + \".html\";\n let searchRes = (await ($parcel$interopDefault($1PmeY$axios)).get(urlSerch)).data;\n let songList = await (0, $e498536cecf4b2de$export$c55fd7b1d7fa3710)(searchRes, \"_\");\n songList = songList.map((_)=>{\n return {\n id: _.id,\n title: _.title,\n artist: _.artist\n };\n });\n musicList = musicList.concat(songList);\n page++;\n res.musicList = musicList;\n // \u7ffb\u9875\uff0c\u6700\u591a\u7ffb3\u9875\uff0c\u7ea6200\u6761\u6570\u636e\n if (songList.length < 68 || page > 3) break;\n }\n return res;\n}\nasync function $fb42a3116a5ee582$var$getRecommendSheetTags() {\n try {\n var result = {};\n var datas = [];\n var pinned = [];\n const html = (await ($parcel$interopDefault($1PmeY$axios)).get($fb42a3116a5ee582$var$host + \"/playtype/index.html\")).data;\n const $ = $1PmeY$cheerio.load(html);\n const tagList = $(\"div.ilingku_fl\");\n for(let i = 0; i < tagList.length; i++){\n var tag = $(tagList[i]).find(\"li:first-child\").text().replace(\":\", \"\");\n var group = {};\n group.title = tag;\n var secondTag = [];\n const secondTagList = $(tagList[i]).find(\"a\");\n for(let j = 0; j < secondTagList.length; j++){\n var item = {\n id: $(secondTagList[j]).attr(\"href\").match(/\\/playtype\\/(.*?).html/)[1],\n title: $(secondTagList[j]).text()\n };\n secondTag.push(item);\n if (j == 0) pinned.push(item);\n }\n group.data = secondTag;\n datas.push(group);\n }\n result.data = datas;\n result.pinned = pinned;\n return result;\n } catch (e) {\n console.log(e);\n }\n return {};\n}\nasync function $fb42a3116a5ee582$var$getRecommendSheetsByTag(tag, page) {\n try {\n var result = {};\n var sheets = [];\n var id = tag.id !== \"\" ? tag.id : \"index\";\n var searchUrl = $fb42a3116a5ee582$var$host + \"/playtype/\" + id + \"/\" + page + \".html\";\n const html = (await ($parcel$interopDefault($1PmeY$axios)).get(searchUrl)).data;\n const $ = $1PmeY$cheerio.load(html);\n const sheetList = $(\"div.video_list\").find(\"li\");\n for(let i = 0; i < sheetList.length; i++)sheets.push({\n id: $(sheetList[i]).find(\".pic a\").attr(\"href\").match(/\\/playlist\\/(.*?).html/)[1],\n title: $(sheetList[i]).find(\".name a\").text(),\n artwork: $(sheetList[i]).find(\".pic a img\").attr(\"src\")\n });\n result.data = sheets;\n result.isEnd = sheets.length < 30;\n return result;\n } catch (e) {\n console.log(e);\n }\n return {};\n}\nasync function $fb42a3116a5ee582$var$getMediaSource(musicItem, quality) {\n let header = {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"Referer\": $fb42a3116a5ee582$var$host + `/song/${musicItem.id}.html`\n };\n let mp3_Result = (await ($parcel$interopDefault($1PmeY$axios))({\n method: \"post\",\n url: $fb42a3116a5ee582$var$host + `/js/play.php`,\n headers: header,\n data: `id=${musicItem.id}&type=music`\n })).data;\n if (mp3_Result.url) return {\n url: mp3_Result.url,\n quality: quality\n };\n return {\n url: \"\"\n };\n}\nasync function $fb42a3116a5ee582$var$getMusicSheetInfo(sheet, page) {\n var result = {};\n let urlSerch = $fb42a3116a5ee582$var$host + \"/playlist/\" + sheet.id + \"/\" + page + \".html\";\n let searchRes = (await ($parcel$interopDefault($1PmeY$axios)).get(urlSerch)).data;\n const $ = $1PmeY$cheerio.load(searchRes);\n result.sheetItem = {\n description: $(\".info\").text()\n };\n let songList = await (0, $e498536cecf4b2de$export$c55fd7b1d7fa3710)(searchRes, \" - \");\n result.musicList = songList;\n result.isEnd = songList.length < 68;\n return result;\n}\nconst $fb42a3116a5ee582$var$pluginInstance = {\n platform: \"\u7231\u542c\",\n version: \"0.1.0\",\n author: \"SoEasy\u540c\u5b66\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/at.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\n \"music\",\n \"album\",\n \"artist\"\n ],\n search: $12b2041efbdef206$export$2e2bcd8739ae039,\n getMediaSource: $fb42a3116a5ee582$var$getMediaSource,\n getLyric: $fb42a3116a5ee582$var$getLyric,\n getTopLists: $fb42a3116a5ee582$var$getTopLists,\n getTopListDetail: $fb42a3116a5ee582$var$getTopListDetail,\n getRecommendSheetTags: $fb42a3116a5ee582$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $fb42a3116a5ee582$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $fb42a3116a5ee582$var$getMusicSheetInfo\n};\nvar /*search(\"\u7ae5\u8bdd\u9547\", 1, \"music\").then((res) => {\n console.log(res)\n getMediaSource(res.data[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.data[0]).then((res) => {\n console.log(res)\n })\n})*/ /*getTopLists().then((res) => {\n console.log(res)\n getTopListDetail(res[0].data[0]).then((res) => {\n console.log(res)\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.musicList[0]).then((res) => {\n console.log(res)\n })\n })\n})*/ /*getRecommendSheetTags().then((res) => {\n console.log(res)\n getRecommendSheetsByTag(res.pinned[0], 1).then((res) => {\n console.log(res)\n getMusicSheetInfo(res.data[0], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.musicList[0]).then((res) => {\n console.log(res)\n })\n })\n })\n})*/ $fb42a3116a5ee582$export$2e2bcd8739ae039 = $fb42a3116a5ee582$var$pluginInstance;\n\n\n//# sourceMappingURL=2t58.js.map", "id": "msg_1789568444033"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:44] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 爱听, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568444033: True [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 爱听 [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我Fish [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:44] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211Fish", "code": "var $M8GQN$axios = require(\"axios\");\nvar $M8GQN$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $4e63e094b4590b2b$export$2e2bcd8739ae039);\n\n\nconst $4e63e094b4590b2b$var$pageSize = 30;\nfunction $4e63e094b4590b2b$var$artworkShort2Long(albumpicShort) {\n var _a;\n const firstSlashOfAlbum = (_a = albumpicShort === null || albumpicShort === void 0 ? void 0 : albumpicShort.indexOf(\"/\")) !== null && _a !== void 0 ? _a : -1;\n return firstSlashOfAlbum !== -1 ? `https://img4.kuwo.cn/star/albumcover/1080${albumpicShort.slice(firstSlashOfAlbum)}` : undefined;\n}\nfunction $4e63e094b4590b2b$var$formatMusicItem(_) {\n return {\n id: _.MUSICRID.replace(\"MUSIC_\", \"\"),\n artwork: $4e63e094b4590b2b$var$artworkShort2Long(_.web_albumpic_short),\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.NAME || \"\"),\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.ARTIST || \"\"),\n album: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.ALBUM || \"\"),\n albumId: _.ALBUMID,\n artistId: _.ARTISTID,\n formats: _.FORMATS\n };\n}\nfunction $4e63e094b4590b2b$var$formatAlbumItem(_) {\n var _a;\n return {\n id: _.albumid,\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.artist || \"\"),\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.name || \"\"),\n artwork: (_a = _.img) !== null && _a !== void 0 ? _a : $4e63e094b4590b2b$var$artworkShort2Long(_.pic),\n description: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.info || \"\"),\n date: _.pub,\n artistId: _.artistid\n };\n}\nfunction $4e63e094b4590b2b$var$formatArtistItem(_) {\n return {\n id: _.ARTISTID,\n avatar: _.hts_PICPATH,\n name: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.ARTIST || \"\"),\n artistId: _.ARTISTID,\n description: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.desc || \"\"),\n worksNum: _.SONGNUM\n };\n}\nfunction $4e63e094b4590b2b$var$formatMusicSheet(_) {\n return {\n id: _.playlistid,\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.name || \"\"),\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.nickname || \"\"),\n artwork: _.pic,\n playCount: _.playcnt,\n description: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.intro || \"\"),\n worksNum: _.songnum\n };\n}\nasync function $4e63e094b4590b2b$var$searchMusic(query, page) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: \"get\",\n url: `http://search.kuwo.cn/r.s`,\n params: {\n client: \"kt\",\n all: query,\n pn: page - 1,\n rn: $4e63e094b4590b2b$var$pageSize,\n uid: 2574109560,\n ver: \"kwplayer_ar_8.5.4.2\",\n vipver: 1,\n ft: \"music\",\n cluster: 0,\n strategy: 2012,\n encoding: \"utf8\",\n rformat: \"json\",\n vermerge: 1,\n mobi: 1\n }\n })).data;\n const songs = res.abslist.map($4e63e094b4590b2b$var$formatMusicItem);\n return {\n isEnd: (+res.PN + 1) * +res.RN >= +res.TOTAL,\n data: songs\n };\n}\nasync function $4e63e094b4590b2b$var$searchAlbum(query, page) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: \"get\",\n url: `http://search.kuwo.cn/r.s`,\n params: {\n all: query,\n ft: \"album\",\n itemset: \"web_2013\",\n client: \"kt\",\n pn: page - 1,\n rn: $4e63e094b4590b2b$var$pageSize,\n rformat: \"json\",\n encoding: \"utf8\",\n pcjson: 1\n }\n })).data;\n const albums = res.albumlist.map($4e63e094b4590b2b$var$formatAlbumItem);\n return {\n isEnd: (+res.PN + 1) * +res.RN >= +res.TOTAL,\n data: albums\n };\n}\nasync function $4e63e094b4590b2b$var$searchArtist(query, page) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: \"get\",\n url: `http://search.kuwo.cn/r.s`,\n params: {\n all: query,\n ft: \"artist\",\n itemset: \"web_2013\",\n client: \"kt\",\n pn: page - 1,\n rn: $4e63e094b4590b2b$var$pageSize,\n rformat: \"json\",\n encoding: \"utf8\",\n pcjson: 1\n }\n })).data;\n const artists = res.abslist.map($4e63e094b4590b2b$var$formatArtistItem);\n return {\n isEnd: (+res.PN + 1) * +res.RN >= +res.TOTAL,\n data: artists\n };\n}\nasync function $4e63e094b4590b2b$var$searchMusicSheet(query, page) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: \"get\",\n url: `http://search.kuwo.cn/r.s`,\n params: {\n all: query,\n ft: \"playlist\",\n itemset: \"web_2013\",\n client: \"kt\",\n pn: page - 1,\n rn: $4e63e094b4590b2b$var$pageSize,\n rformat: \"json\",\n encoding: \"utf8\",\n pcjson: 1\n }\n })).data;\n const musicSheets = res.abslist.map($4e63e094b4590b2b$var$formatMusicSheet);\n return {\n isEnd: (+res.PN + 1) * +res.RN >= +res.TOTAL,\n data: musicSheets\n };\n}\nasync function $4e63e094b4590b2b$var$getArtistMusicWorks(artistItem, page) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: \"get\",\n url: `http://search.kuwo.cn/r.s`,\n params: {\n pn: page - 1,\n rn: $4e63e094b4590b2b$var$pageSize,\n artistid: artistItem.id,\n stype: \"artist2music\",\n sortby: 0,\n alflac: 1,\n show_copyright_off: 1,\n pcmp4: 1,\n encoding: \"utf8\",\n plat: \"pc\",\n thost: \"search.kuwo.cn\",\n vipver: \"MUSIC_9.1.1.2_BCS2\",\n devid: \"38668888\",\n newver: 1,\n pcjson: 1\n }\n })).data;\n const songs = res.musiclist.map((_)=>{\n return {\n id: _.musicrid,\n artwork: $4e63e094b4590b2b$var$artworkShort2Long(_.web_albumpic_short),\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.name || \"\"),\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.artist || \"\"),\n album: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.album || \"\"),\n albumId: _.albumid,\n artistId: _.artistid,\n formats: _.formats\n };\n });\n return {\n isEnd: (+res.pn + 1) * $4e63e094b4590b2b$var$pageSize >= +res.total,\n data: songs\n };\n}\nasync function $4e63e094b4590b2b$var$getArtistAlbumWorks(artistItem, page) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: \"get\",\n url: `http://search.kuwo.cn/r.s`,\n params: {\n pn: page - 1,\n rn: $4e63e094b4590b2b$var$pageSize,\n artistid: artistItem.id,\n stype: \"albumlist\",\n sortby: 1,\n alflac: 1,\n show_copyright_off: 1,\n pcmp4: 1,\n encoding: \"utf8\",\n plat: \"pc\",\n thost: \"search.kuwo.cn\",\n vipver: \"MUSIC_9.1.1.2_BCS2\",\n devid: \"38668888\",\n newver: 1,\n pcjson: 1\n }\n })).data;\n const albums = res.albumlist.map($4e63e094b4590b2b$var$formatAlbumItem);\n return {\n isEnd: (+res.pn + 1) * $4e63e094b4590b2b$var$pageSize >= +res.total,\n data: albums\n };\n}\nasync function $4e63e094b4590b2b$var$getArtistWorks(artistItem, page, type) {\n if (type === \"music\") return $4e63e094b4590b2b$var$getArtistMusicWorks(artistItem, page);\n else if (type === \"album\") return $4e63e094b4590b2b$var$getArtistAlbumWorks(artistItem, page);\n}\nasync function $4e63e094b4590b2b$var$getLyric(musicItem) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios))).get(\"http://m.kuwo.cn/newh5/singles/songinfoandlrc\", {\n params: {\n musicId: musicItem.id,\n httpStatus: 1\n }\n })).data;\n const list = res.data.lrclist;\n return {\n rawLrc: list.map((_)=>`[${_.time}]${_.lineLyric}`).join(\"\\n\")\n };\n}\nasync function $4e63e094b4590b2b$var$getAlbumInfo(albumItem) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: \"get\",\n url: `http://search.kuwo.cn/r.s`,\n params: {\n pn: 0,\n rn: 100,\n albumid: albumItem.id,\n stype: \"albuminfo\",\n sortby: 0,\n alflac: 1,\n show_copyright_off: 1,\n pcmp4: 1,\n encoding: \"utf8\",\n plat: \"pc\",\n thost: \"search.kuwo.cn\",\n vipver: \"MUSIC_9.1.1.2_BCS2\",\n devid: \"38668888\",\n newver: 1,\n pcjson: 1\n }\n })).data;\n const songs = res.musiclist.map((_)=>{\n var _a;\n return {\n id: _.id,\n artwork: (_a = albumItem.artwork) !== null && _a !== void 0 ? _a : res.img,\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.name || \"\"),\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.artist || \"\"),\n album: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.album || \"\"),\n albumId: albumItem.id,\n artistId: _.artistid,\n formats: _.formats\n };\n });\n return {\n musicList: songs\n };\n}\nasync function $4e63e094b4590b2b$var$getTopLists() {\n const result = (await (0, ($parcel$interopDefault($M8GQN$axios))).get(\"http://wapi.kuwo.cn/api/pc/bang/list\")).data.child;\n return result.map((e)=>({\n title: e.disname,\n data: e.child.map((_)=>{\n var _a, _b;\n return {\n id: _.sourceid,\n coverImg: (_b = (_a = _.pic5) !== null && _a !== void 0 ? _a : _.pic2) !== null && _b !== void 0 ? _b : _.pic,\n title: _.name,\n description: _.intro\n };\n })\n }));\n}\nasync function $4e63e094b4590b2b$var$getTopListDetail(topListItem) {\n const res = await (0, ($parcel$interopDefault($M8GQN$axios))).get(`http://kbangserver.kuwo.cn/ksong.s`, {\n params: {\n from: \"pc\",\n fmt: \"json\",\n pn: 0,\n rn: 80,\n type: \"bang\",\n data: \"content\",\n id: topListItem.id,\n show_copyright_off: 0,\n pcmp4: 1,\n isbang: 1,\n userid: 0,\n httpStatus: 1\n }\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.musiclist.map((_)=>{\n return {\n id: _.id,\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.name || \"\"),\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.artist || \"\"),\n album: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.album || \"\"),\n albumId: _.albumid,\n artistId: _.artistid,\n formats: _.formats\n };\n })\n });\n}\nasync function $4e63e094b4590b2b$var$getMusicSheetResponseById(id, page, pagesize = 50) {\n return (await (0, ($parcel$interopDefault($M8GQN$axios))).get(`http://nplserver.kuwo.cn/pl.svc`, {\n params: {\n op: \"getlistinfo\",\n pid: id,\n pn: page - 1,\n rn: pagesize,\n encode: \"utf8\",\n keyset: \"pl2012\",\n vipver: \"MUSIC_9.1.1.2_BCS2\",\n newver: 1\n }\n })).data;\n}\nasync function $4e63e094b4590b2b$var$importMusicSheet(urlLike) {\n var _a, _b;\n let id;\n if (!id) id = (_a = urlLike.match(/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)) === null || _a === void 0 ? void 0 : _a[1];\n if (!id) id = (_b = urlLike.match(/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)) === null || _b === void 0 ? void 0 : _b[1];\n if (!id) id = urlLike.match(/^\\s*(\\d+)\\s*$/);\n if (!id) return;\n let page = 1;\n let totalPage = 30;\n let musicList = [];\n while(page < totalPage){\n try {\n const data = await $4e63e094b4590b2b$var$getMusicSheetResponseById(id, page, 80);\n totalPage = Math.ceil(data.total / 80);\n if (isNaN(totalPage)) totalPage = 1;\n musicList = musicList.concat(data.musicList.map((_)=>({\n id: _.id,\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.name || \"\"),\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.artist || \"\"),\n album: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.album || \"\"),\n albumId: _.albumid,\n artistId: _.artistid,\n formats: _.formats\n })));\n } catch (_c) {}\n await new Promise((resolve)=>{\n setTimeout((args)=>{\n resolve(args);\n }, 200 + Math.random() * 100);\n });\n ++page;\n }\n return musicList;\n}\nasync function $4e63e094b4590b2b$var$getRecommendSheetTags() {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios))).get(`http://wapi.kuwo.cn/api/pc/classify/playlist/getTagList?cmd=rcm_keyword_playlist&user=0&prod=kwplayer_pc_9.0.5.0&vipver=9.0.5.0&source=kwplayer_pc_9.0.5.0&loginUid=0&loginSid=0&appUid=76039576`)).data.data;\n const data = res.map((group)=>({\n title: group.name,\n data: group.data.map((_)=>({\n id: _.id,\n digest: _.digest,\n title: _.name\n }))\n })).filter((item)=>item.data.length);\n const pinned = [\n {\n id: \"1848\",\n title: \"\u7ffb\u5531\"\n },\n {\n id: \"621\",\n title: \"\u7f51\u7edc\"\n },\n {\n title: \"\u4f24\u611f\",\n id: \"146\"\n },\n {\n title: \"\u6b27\u7f8e\",\n id: \"35\"\n }\n ];\n return {\n data: data,\n pinned: pinned\n };\n}\nasync function $4e63e094b4590b2b$var$getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n let res;\n if (tag.id) {\n if (tag.digest === \"10000\") res = (await (0, ($parcel$interopDefault($M8GQN$axios))).get(`http://wapi.kuwo.cn/api/pc/classify/playlist/getTagPlayList?loginUid=0&loginSid=0&appUid=76039576&pn=${page - 1}&id=${tag.id}&rn=${pageSize}`)).data.data;\n else {\n let digest43Result = (await (0, ($parcel$interopDefault($M8GQN$axios))).get(`http://mobileinterfaces.kuwo.cn/er.s?type=get_pc_qz_data&f=web&id=${tag.id}&prod=pc`)).data;\n res = {\n total: 0,\n data: digest43Result.reduce((prev, curr)=>[\n ...prev,\n ...curr.list\n ])\n };\n }\n } else res = (await (0, ($parcel$interopDefault($M8GQN$axios))).get(`https://wapi.kuwo.cn/api/pc/classify/playlist/getRcmPlayList?loginUid=0&loginSid=0&appUid=76039576&&pn=${page - 1}&rn=${pageSize}&order=hot`)).data.data;\n const isEnd = page * pageSize >= res.total;\n return {\n isEnd: isEnd,\n data: res.data.map((_)=>({\n title: _.name,\n artist: _.uname,\n id: _.id,\n artwork: _.img,\n playCount: _.listencnt,\n createUserId: _.uid\n }))\n };\n}\nasync function $4e63e094b4590b2b$var$getMusicSheetInfo(sheet, page) {\n const res = await $4e63e094b4590b2b$var$getMusicSheetResponseById(sheet.id, page, $4e63e094b4590b2b$var$pageSize);\n return {\n isEnd: page * $4e63e094b4590b2b$var$pageSize >= res.total,\n musicList: res.musiclist.map((_)=>({\n id: _.id,\n title: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.name || \"\"),\n artist: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.artist || \"\"),\n album: (0, ($parcel$interopDefault($M8GQN$he))).decode(_.album || \"\"),\n albumId: _.albumid,\n artistId: _.artistid,\n formats: _.formats\n }))\n };\n}\nasync function $4e63e094b4590b2b$var$getMediaSource(musicItem, quality) {\n const FISH_API_URL = \"https://m-api.ceseet.me\";\n const API_KEY = ``;\n const fishQualityMap = {\n 'low': '128k',\n 'standard': '320k',\n 'high': 'flac',\n 'super': 'flac24bit'\n };\n const targetQuality = fishQualityMap[quality] || '128k';\n const source = 'kw';\n try {\n const requestUrl = `${FISH_API_URL}/url/${source}/${musicItem.id}/${targetQuality}`;\n const response = await (0, ($parcel$interopDefault($M8GQN$axios)))({\n method: 'get',\n url: requestUrl,\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'lx-music-script/0.0.3',\n 'X-Request-Key': API_KEY\n },\n timeout: 10000\n });\n const responseBody = response.data;\n if (!responseBody || typeof responseBody.code === 'undefined') {\n throw new Error('API\u54cd\u5e94\u683c\u5f0f\u5f02\u5e38');\n }\n if (responseBody.code === 0 && responseBody.data) {\n return {\n url: responseBody.data\n };\n } else {\n const errorMessages = {\n 1: 'IP\u88ab\u5c01\u7981',\n 2: '\u83b7\u53d6\u97f3\u4e50URL\u5931\u8d25: ' + (responseBody.msg || ''),\n 4: '\u8fdc\u7a0b\u670d\u52a1\u5668\u9519\u8bef',\n 5: '\u8bf7\u6c42\u8fc7\u4e8e\u9891\u7e41\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5',\n 6: '\u8bf7\u6c42\u53c2\u6570\u9519\u8bef'\n };\n const errorMsg = errorMessages[responseBody.code] || \n (responseBody.msg || '\u672a\u77e5\u9519\u8bef');\n throw new Error(`[${responseBody.code}] ${errorMsg}`);\n }\n } catch (error) {\n console.error('[\u5c0f\u8717\u97f3\u4e50-\u64ad\u653e\u4fee\u590d] \u8bf7\u6c42\u5931\u8d25:', error.message);\n return {\n url: '',\n error: error.message\n };\n }\n}\nasync function $4e63e094b4590b2b$var$getMusicInfo(musicItem) {\n const res = (await (0, ($parcel$interopDefault($M8GQN$axios))).get(\"http://m.kuwo.cn/newh5/singles/songinfoandlrc\", {\n params: {\n musicId: musicItem.id,\n httpStatus: 1\n }\n })).data;\n const originalUrl = res.data.songinfo.pic;\n let picUrl;\n if (originalUrl.includes(\"starheads/\")) picUrl = originalUrl.replace(/starheads\\/\\d+/, \"starheads/800\");\n else if (originalUrl.includes(\"albumcover/\")) picUrl = originalUrl.replace(/albumcover\\/\\d+/, \"albumcover/800\");\n return {\n artwork: picUrl\n };\n}\nasync function $4e63e094b4590b2b$var$search(query, page, type) {\n if (type === \"music\") return await $4e63e094b4590b2b$var$searchMusic(query, page);\n if (type === \"album\") return await $4e63e094b4590b2b$var$searchAlbum(query, page);\n if (type === \"artist\") return await $4e63e094b4590b2b$var$searchArtist(query, page);\n if (type === \"sheet\") return await $4e63e094b4590b2b$var$searchMusicSheet(query, page);\n}\nconst $4e63e094b4590b2b$var$pluginInstance = {\n platform: \"\u9177\u6211(Fish\u97f3\u6e90)\",\n author: \"\u7af9\u4f40\",\n version: \"1\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E9%85%B7%E6%88%91Fish.js\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"\u9177\u6211APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u590d\u5236\u8bd5\u542c\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\",\n \"artist\"\n ],\n search: $4e63e094b4590b2b$var$search,\n getMediaSource: $4e63e094b4590b2b$var$getMediaSource,\n getMusicInfo: $4e63e094b4590b2b$var$getMusicInfo,\n getAlbumInfo: $4e63e094b4590b2b$var$getAlbumInfo,\n getLyric: $4e63e094b4590b2b$var$getLyric,\n getArtistWorks: $4e63e094b4590b2b$var$getArtistWorks,\n getTopLists: $4e63e094b4590b2b$var$getTopLists,\n getTopListDetail: $4e63e094b4590b2b$var$getTopListDetail,\n importMusicSheet: $4e63e094b4590b2b$var$importMusicSheet,\n getRecommendSheetTags: $4e63e094b4590b2b$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $4e63e094b4590b2b$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $4e63e094b4590b2b$var$getMusicSheetInfo\n};\nvar $4e63e094b4590b2b$export$2e2bcd8739ae039 = $4e63e094b4590b2b$var$pluginInstance;\n\n\n//# sourceMappingURL=xiaowo.js.map", "id": "msg_1789568444335"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:44] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我Fish, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568444335: True [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我Fish [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ音乐 (非VIP) [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:44] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "code": "const axios_1 = require(\"axios\"),\n CryptoJs = require(\"crypto-js\"),\n he_1 = require(\"he\"),\n qs = require(\"qs\");\n\nlet Config = {\n server: \"https://adad23u.appinstall.life:2358\",\n platform: \"QQ\u97f3\u4e50\",\n key: \"88452cf25c1ca5b\",\n};\n\nlet ZZ123Config = {\n headers: {\n \"Content-Type\": \"application/json\",\n Referer: \"https://zz123.com/\",\n \"User-Agent\":\n \"MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",\n },\n};\n\nconst pageSize = 20;\n\nfunction formatYunMusicItem(musicItem) {\n return {\n id: musicItem.MUSICRID.replace(\n 'MUSIC_',\n \"\"\n ),\n title: (0, he_1.decode)(\n musicItem.NAME || \"\"\n ),\n artist: (0, he_1.decode)(\n musicItem.ARTIST || \"\"\n ),\n isfree:\n musicItem?.payInfo?.listen_fragment !== \"1\",\n };\n}\n\nfunction formatMusicItem(musicItem) {\n var _a, _b, _c;\n const albumid =\n musicItem.albumid ||\n ((_a = musicItem.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid =\n musicItem.albummid ||\n ((_b = musicItem.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname =\n musicItem.albumname ||\n ((_c = musicItem.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: musicItem.id || musicItem.songid,\n songmid: musicItem.mid || musicItem.songmid,\n title: musicItem.title || musicItem.songname,\n artist: musicItem.singer?.map((s) => s.name)?.join(\", \"),\n artwork: albummid\n ? `https://y.gtimg.cn/music/photo_new/T002R300x300M000${albummid}.jpg`\n : undefined,\n album: albumname,\n lrc: musicItem.lyric || undefined,\n albumid: albumid,\n albummid: albummid,\n isfree: musicItem.pay.pay_play === 0 || musicItem.pay.payplay === 0,\n };\n}\n\nconst chineseSel = (item) => {\n let res = [];\n const reg = /[\\u4e00-\\u9fa5]/g;\n return item && (res = item.match(reg)), res?.length ? res.join(\"\") : \"\";\n};\n\nfunction formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork:\n _.albumPic ||\n `https://y.gtimg.cn/music/photo_new/T002R300x300M000${_.albumMID || _.album_mid\n }.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc,\n };\n}\nfunction formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum,\n };\n}\n\nconst searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\",\n};\n\nconst headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\",\n};\n\nconst validSongFilter = () => {\n return true;\n};\n\nasync function searchBase(query, page, type) {\n const res = (\n await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: pageSize,\n page_num: page,\n query: query,\n search_type: type,\n },\n },\n },\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * pageSize,\n data: res.req_1.data.body[searchTypeMap[type]].list,\n };\n}\n\nasync function searchMusic(query, page) {\n const songs = await searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.filter(validSongFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const albums = await searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map(formatAlbumItem),\n };\n}\nasync function searchArtist(query, page) {\n const artists = await searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map(formatArtistItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const musicSheet = await searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item) => ({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name,\n })),\n };\n}\n\nasync function searchLyric(query, page) {\n const songs = await searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it) =>\n Object.assign(Object.assign({}, formatMusicItem(it)), {\n rawLrcTxt: it.content,\n })\n ),\n };\n}\n\nfunction getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) {\n s = sArr[1];\n } else {\n return key ? undefined : {};\n }\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item) => {\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n } catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction changeUrlQuery(obj, baseUrl) {\n const query = getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key) => {\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") {\n queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n }\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst typeMap = {\n 128: { s: \"M500\", e: \".mp3\" },\n 320: { s: \"M800\", e: \".mp3\" },\n m4a: { s: \"C400\", e: \".m4a\" },\n ape: { s: \"A000\", e: \".ape\" },\n flac: { s: \"F000\", e: \".flac\" },\n};\n\nasync function getSourceUrl(id, type = \"128\") {\n const mediaId = id;\n let uin = \"\";\n const guid = (Math.random() * 10000000).toFixed(0);\n const typeObj = typeMap[type];\n const file = `${typeObj.s}${id}${mediaId}${typeObj.e}`;\n const url = changeUrlQuery({\n \"-\": \"getplaysongvkey\",\n g_tk: 5381,\n loginUin: uin,\n hostUin: 0,\n format: \"json\",\n inCharset: \"utf8\",\n outCharset: \"utf-8\u00acice=0\",\n platform: \"yqq.json\",\n needNewCode: 0,\n data: JSON.stringify({\n req_0: {\n module: \"vkey.GetVkeyServer\",\n method: \"CgiGetVkey\",\n param: {\n filename: [file],\n guid: guid,\n songmid: [id],\n songtype: [0],\n uin: uin,\n loginflag: 1,\n platform: \"20\",\n },\n },\n comm: {\n uin: uin,\n format: \"json\",\n ct: 19,\n cv: 0,\n authst: \"\",\n },\n }),\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg\");\n return (await (0, axios_1.default)({\n method: \"GET\",\n url: url,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\nasync function getAlbumInfo(albumItem) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000,\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2,\n },\n module: \"music.musichallAlbum.AlbumSongList\",\n },\n }),\n },\n \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\"\n );\n const res = (\n await (0, axios_1.default)({\n url: url,\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n musicList: res.albumSonglist.data.songList\n .filter((_) => validSongFilter(_.songInfo))\n .map((item) => {\n const _ = item.songInfo;\n return formatMusicItem(_);\n }),\n };\n}\nasync function getArtistSongs(artistItem, page) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * pageSize,\n num: pageSize,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n },\n \"http://u.y.qq.com/cgi-bin/musicu.fcg\"\n );\n const res = (\n await (0, axios_1.default)({\n url: url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.singer.data.total_song <= page * pageSize,\n data: res.singer.data.songlist.filter(validSongFilter).map(formatMusicItem),\n };\n}\nasync function getArtistAlbums(artistItem, page) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * pageSize,\n num: pageSize / 1,\n exstatus: 1,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n },\n \"http://u.y.qq.com/cgi-bin/musicu.fcg\"\n );\n const res = (\n await (0, axios_1.default)({\n url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * pageSize,\n data: res.singerAlbum.data.list.map(formatAlbumItem),\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n return getArtistSongs(artistItem, page);\n }\n if (type === \"album\") {\n return getArtistAlbums(artistItem, page);\n }\n}\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid\n }&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: { Referer: \"https://y.qq.com\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const res = JSON.parse(\n result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n );\n let translation;\n if (res.trans) {\n translation = he.decode(\n CryptoJs.enc.Base64.parse(res.trans).toString(CryptoJs.enc.Utf8)\n );\n }\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(res.lyric).toString(CryptoJs.enc.Utf8)\n ),\n translation,\n };\n}\n\nasync function importMusicSheet(urlLike) {\n let id;\n if (!id) {\n id = (urlLike.match(\n /https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/\n ) || [])[1];\n }\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) ||\n [])[1];\n }\n if (!id) {\n id = (urlLike.match(/^(\\d+)$/) || [])[1];\n }\n if (!id) {\n return;\n }\n const result = (\n await (0, axios_1.default)({\n url: `http://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: { Referer: \"https://y.qq.com/n/yqq/playlist\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const res = JSON.parse(\n result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n );\n return res.cdlist[0].songlist.filter(validSongFilter).map(formatMusicItem);\n}\nasync function getTopLists() {\n const list = await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return list.data.topList.data.group.map((e) => ({\n title: e.groupName,\n data: e.toplist.map((_) => ({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl,\n })),\n }));\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n const res = await (0, axios_1.default)({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id\n }%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"\n }%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList\n .filter(validSongFilter)\n .map(formatMusicItem),\n });\n}\nasync function getRecommendSheetTags() {\n const res = (\n await axios_1.default.get(\n \"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\",\n {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n }\n )\n ).data.data.categories;\n const data = res.slice(1).map((_) => ({\n title: _.categoryGroupName,\n data: _.items.map((tag) => ({\n id: tag.categoryId,\n title: tag.categoryName,\n })),\n }));\n const pinned = [];\n for (let d of data) {\n if (d.data.length) {\n pinned.push(d.data[0]);\n }\n }\n return {\n pinned,\n data,\n };\n}\n\n\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (\n await axios_1.default.get(\n \"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\",\n {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId:\n (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1,\n },\n }\n )\n ).data;\n const res = JSON.parse(\n rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n ).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item) => {\n var _a, _b;\n return {\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist:\n (_b =\n (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !==\n null && _b !== void 0\n ? _b\n : \"\",\n };\n });\n return {\n isEnd,\n data,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const data = await importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data,\n };\n}\nasync function getMusicKuWoSource(musicItem) {\n try {\n\n let time = Math.round(Date.now() / 1e3).toString(),\n keyStr = '88452cf25c1ca5b',\n hash = CryptoJs.MD5(\n musicItem.third_id + keyStr + time\n );\n const url =\n 'https://sfuuc53rd.appinstall.life:8022/music/yun.php?flag=' +\n hash +\n 'id=' +\n musicItem.third_id +\n '&tm=' +\n time,\n res = (\n await axios_1.default.get(\n url\n )\n ).data;\n if (\n res.url !== \"\"\n ) {\n let params = {\n headers: {\n \"Content-Type\": 'application/json',\n Host: 'nmobi.kuwo.cn',\n Referer: 'https://www.kuwo.cn/search/list?key=',\n },\n },\n res1 = (\n await axios_1.default.get(\n res.url,\n params\n )\n ).data,\n spIdx = res1.indexOf(\n 'url='\n ),\n str2 = res1.substring(spIdx),\n idx2 = str2.indexOf(\"\\x0d\\x0a\");\n return (\n (str2 = str2.substring(4, idx2)),\n { url: str2 }\n );\n }\n\n } catch {\n\n }\n return { url: \"\" };\n}\n// async function viewLog(_0x10282d) {\n// const _0x351b4b = _0x372c47,\n// _0x36b694 = {\n// GJaOu: _0x351b4b(0x1a4, \"G*8K\"),\n// NPJtT: function (_0x196b96, _0xa18d55) {\n// return _0x196b96 === _0xa18d55;\n// },\n// shYmt: _0x351b4b(0x437, \"1]Wc\"),\n// ZRBpe: _0x351b4b(0x1d6, \"ESa4\"),\n// HYxjW: _0x351b4b(0x26f, \"gqjc\"),\n// AoPpm: function (_0x28f3fd, _0xe56bbe) {\n// return _0x28f3fd + _0xe56bbe;\n// },\n// tDOFe: function (_0x2748b7, _0x404124) {\n// return _0x2748b7 + _0x404124;\n// },\n// ynMVJ: function (_0x2af97e, _0x18634b) {\n// return _0x2af97e + _0x18634b;\n// },\n// OSTEc: function (_0x2b1cb6, _0x291f3b) {\n// return _0x2b1cb6 + _0x291f3b;\n// },\n// EfaoO: function (_0x385eb3, _0x344e02) {\n// return _0x385eb3(_0x344e02);\n// },\n// xNGfR: _0x351b4b(0x2d5, \"gqjc\"),\n// qbrGs: function (_0x3a56a9, _0x34d4f6) {\n// return _0x3a56a9 === _0x34d4f6;\n// },\n// wyjwU: _0x351b4b(0x2ec, \"Xq##\"),\n// miODi: _0x351b4b(0x4ba, \"cSN(\"),\n// sHnBf: _0x351b4b(0x169, \"AhM)\"),\n// };\n// try {\n// if (\n// _0x36b694[_0x351b4b(0x2be, \"lM4M\")](\n// _0x36b694[_0x351b4b(0x225, \"3r^q\")],\n// _0x36b694[_0x351b4b(0x272, \"%[Ik\")]\n// )\n// )\n// return { url: \"\" };\n// else {\n// let _0x4ba485 =\n// Config[_0x351b4b(0x435, \"o%l(\")] + _0x351b4b(0x373, \"G*8K\"),\n// _0x336625 = Math[_0x351b4b(0x501, \"biLz\")](\n// new Date()[_0x351b4b(0x185, \"hY7y\")]() / 0x3e8\n// )[_0x351b4b(0x4e5, \"n1oj\")](),\n// _0x196f42 = {\n// platform: _0x10282d[_0x351b4b(0xe0, \"obYi\")],\n// third_id: _0x10282d[_0x351b4b(0x44a, \"u*ru\")],\n// music_url: _0x10282d[_0x351b4b(0x409, \"%[Ik\")],\n// music_id: _0x10282d[_0x351b4b(0x476, \"SvDu\")],\n// };\n// (_0x196f42[_0x36b694[_0x351b4b(0x3cc, \"75HO\")]] = _0x336625),\n// (_0x196f42[_0x351b4b(0x3e8, \"C9Gu\")] = CryptoJs[\n// _0x351b4b(0x12a, \"3r^q\")\n// ](\n// _0x36b694[_0x351b4b(0x288, \"za4T\")](\n// _0x36b694[_0x351b4b(0x21b, \"[RLd\")](\n// _0x36b694[_0x351b4b(0x1dc, \"lM4M\")](\n// _0x36b694[_0x351b4b(0x317, \"hY7y\")](\n// _0x10282d[_0x351b4b(0x304, \"hEOB\")],\n// _0x36b694[_0x351b4b(0x45a, \"n1oj\")](\n// encodeURIComponent,\n// _0x10282d[_0x351b4b(0xe9, \"%!yu\")]\n// )\n// ),\n// _0x10282d[_0x351b4b(0x259, \"gqjc\")]\n// ),\n// Config[_0x351b4b(0x365, \"IZB8\")]\n// ),\n// _0x336625\n// )\n// )[_0x351b4b(0x50f, \"CC8d\")]()),\n// (0x0, axios_1[_0x351b4b(0x2eb, \"PUu(\")])({\n// method: _0x36b694[_0x351b4b(0x33b, \"^%hc\")],\n// url: _0x4ba485,\n// data: qs[_0x351b4b(0x432, \"EzBF\")](_0x196f42),\n// })[_0x351b4b(0x452, \"0fr)\")]((_0x2e3c54) => {\n// const _0x2a4a40 = _0x351b4b;\n// console[_0x2a4a40(0x1a1, \"gqjc\")](\n// _0x36b694[_0x2a4a40(0x23a, \"3r^q\")],\n// _0x2e3c54[_0x2a4a40(0x271, \"Y7Oy\")]\n// );\n// });\n// }\n// } catch (_0x5a5c37) {\n// if (\n// _0x36b694[_0x351b4b(0x390, \"gqjc\")](\n// _0x36b694[_0x351b4b(0x487, \"tq2O\")],\n// _0x36b694[_0x351b4b(0x2ce, \"UP$$\")]\n// )\n// )\n// return null;\n// else\n// console[_0x351b4b(0x2c9, \"$Sw1\")](\n// _0x36b694[_0x351b4b(0x263, \"jLvN\")],\n// _0x5a5c37\n// );\n// }\n// }\nasync function getMusicKuWoApp(musicItem, thirdItem) {\n\n let ret = { url: \"\" };\n try {\n if (thirdItem != null) {\n ret = getMusicKuWoSource(thirdItem);\n } else {\n let result1 = await getSearchKuwo(\n musicItem\n );\n if (result1) {\n let obj1 = {\n platform: 'yun',\n third_id: result1[\"id\"],\n };\n (ret = await getMusicKuWoSource(\n obj1\n ));\n }\n\n }\n } catch { }\n return ret;\n}\n\n\n\nasync function getSearchKuwo(musicItem) {\n\n let artist = musicItem.artist.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n title = musicItem.title.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n cmb = artist + \"\\x20\" + title;\n const response = (\n await (0, axios_1.default)({\n method: 'get',\n url: 'http://search.kuwo.cn/r.s',\n params: {\n client: \"kt\",\n all: cmb,\n pn: 0x0,\n rn: 0x1e,\n uid: 794762570,\n ver: 'kwplayer_ar_9.2.2.1',\n vipver: \"1\",\n show_copyright_off: 1,\n newver: 1,\n ft: 'music',\n cluster: 0,\n strategy: 2012,\n encoding: 'utf8',\n rformat: 'json',\n vermerge: 1,\n mobi: 1,\n issubtitle: 1,\n },\n })\n ).data;\n let formattedResult =\n response.abslist.map(\n formatYunMusicItem\n );\n return formattedResult.find(\n (item) =>\n item.title\n .toLowerCase()\n .replaceAll(\"\\x20\", \"\")\n .replaceAll(\"&\", \",\") == title &&\n item.artist\n .toLowerCase()\n .replaceAll(\"\\x20\", \"\")\n .replaceAll(\"&\", \",\") == artist\n );\n}\n\n// async function saveServer(musicItem, _0x27af92) {\n// const _0x28b4f5 = _0x372c47,\n// _0x32dce3 = {\n// sBjiW: function (_0x3303d0, _0x358212) {\n// return _0x3303d0 / _0x358212;\n// },\n// bcpIU: function (_0x2f2ef6, _0x668081) {\n// return _0x2f2ef6(_0x668081);\n// },\n// Gcrxm: \"sign\",\n// zooMS: function (_0x423e5b, _0x145eaa) {\n// return _0x423e5b + _0x145eaa;\n// },\n// cYiqe: \"post\",\n// };\n// try {\n// let serverUrl = \"https://adad23u.appinstall.life:2358/api/yun/send\",\n// time = Math.round(Date.now() / 1000),\n// data = {\n// platform: Config.platform,\n// third_id: musicItem.songmid,\n// title: musicItem.title,\n// artwork: musicItem.artwork,\n// artist: musicItem.artist,\n// },\n// data1 = {\n// musicInfo: encodeURIComponent(JSON.stringify(data)),\n// payInfo: encodeURIComponent(JSON.stringify(_0x27af92)),\n// time: time,\n// };\n\n// (data1.sign = CryptoJs.MD5(\n// data1.musicInfo + data1.payInfo + Config.key + time\n// ).toString()),\n// (0x0, axios_1[_0x28b4f5(0xcf, \"EryH\")])({\n// method: _0x32dce3[_0x28b4f5(0x297, \"hY7y\")],\n// url: serverUrl,\n// data: qs[_0x28b4f5(0x4e4, \"^!X0\")](data1),\n// })[_0x28b4f5(0x3fb, \"a5UL\")]((_0x757b7d) => {\n// const _0x1ca823 = _0x28b4f5;\n// console[_0x1ca823(0x33d, \"lM4M\")](\n// \"\u63d0\u4ea4\",\n// _0x757b7d[_0x1ca823(0x3fc, \"CC8d\")]\n// );\n// });\n// } catch (e) { }\n// }\n\nasync function getMusic2t58(musicItem, resultItem) {\n\n try {\n if (resultItem !== null) {\n let params = {\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded',\n Referer:\n 'http://www.2t58.com/song/' +\n resultItem.third_id +\n '.html',\n },\n },\n response = (\n await (0x0, axios_1.default)({\n method: 'post',\n url: 'http://www.2t58.com/js/play.php',\n headers: params.headers,\n data:\n 'id=' +\n resultItem.third_id +\n '&type=music',\n })\n ).data;\n\n\n return response.url != \"\"\n ? ({ url: response.url })\n : { url: \"\" }\n }\n let artist = musicItem.artist.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n title = musicItem.title.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\" \", \"\").replaceAll(\"&\", \"\"),\n enc = encodeURIComponent(artist + '\\x20' + title),\n url =\n 'http://www.2t58.com/so/' + enc + '.html',\n res = (\n await (0, axios_1.default)({\n method: 'get',\n url: url,\n timeout: 5000,\n })\n ).data;\n var reg = /href=\"\\/song\\/(.+?).html\" target=\"_mp3\">(.+?)<\\/a>/g;\n let regResult = res.matchAll(reg),\n resultArr = Array.from(regResult),\n resultArr1 = [];\n for (\n let i = 0;\n i < resultArr.length;\n i++\n ) {\n let item = resultArr[i],\n splitResult = item[2].split(\"-\"),\n singerName = splitResult[0].toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n str = \"\";\n for (\n var j = 1;\n j < splitResult.length;\n j++\n ) {\n str += splitResult[j].toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\" \", \"\").replaceAll(\"&\", \"\");\n }\n let resultItem = {\n key: item[1],\n singerName: singerName,\n songName: str,\n };\n resultArr1.push(resultItem);\n }\n let targetItem = resultArr1.find(\n (item) =>\n item.singerName == artist &&\n item.songName == title\n );\n if (targetItem) {\n let params = {\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded',\n Referer:\n 'http://www.2t58.com/song/' +\n targetItem.key +\n '.html',\n },\n },\n response = (\n await (0, axios_1.default)({\n method: 'post',\n url: 'http://www.2t58.com/js/play.php',\n headers: params.headers,\n data:\n \"id=\" +\n targetItem.key +\n '&type=music',\n })\n ).data;\n if (\n response.url !== ''\n )\n return (\n (resultItem = {\n platform: '2t58',\n third_id: targetItem.key,\n }),\n // saveServer(musicItem, resultItem),\n { url: response.url }\n );\n return { url: \"\" };\n } else return { url: \"\" };\n } catch (e) {\n console.error(e);\n return {\n url: \"\"\n }\n\n }\n}\n\n\nasync function getMusicZZ123(musicItem) {\n return {\n url: \"\"\n }\n // const _0x2a4257 = _0x372c47,\n // _0x36587e = {\n // CsBOg: function (_0x3f0149, _0x2104d9) {\n // return _0x3f0149(_0x2104d9);\n // },\n // nJdTL: function (_0x5a67bf, _0x126256) {\n // return _0x5a67bf == _0x126256;\n // },\n // nxuET: function (_0x131ceb, _0x1fcc73) {\n // return _0x131ceb / _0x1fcc73;\n // },\n // DDpnZ: function (_0x2c40b1, _0x560189) {\n // return _0x2c40b1(_0x560189);\n // },\n // sbRhb: function (_0x45f069, _0x4ba4b8) {\n // return _0x45f069(_0x4ba4b8);\n // },\n // MSQof: 'sign',\n // tfVyS: function (_0x1392e2, _0xe47d35) {\n // return _0x1392e2 + _0xe47d35;\n // },\n // zYReb: function (_0x34f4e5, _0x1d6862) {\n // return _0x34f4e5 + _0x1d6862;\n // },\n // CPFrQ: 'post',\n // syvCc: function (_0x5cd778, _0x5110d6) {\n // return _0x5cd778 != _0x5110d6;\n // },\n // mGmIM: function (_0x2136ef, _0xdc7579) {\n // return _0x2136ef === _0xdc7579;\n // },\n // VWOCG: 'SqFmM',\n // FoHeL: 'YfEid',\n // tAfzh: function (_0x97b101, _0x8a0eca) {\n // return _0x97b101 + _0x8a0eca;\n // },\n // eiZQb: 'search',\n // JDRmt: function (_0x39d41e, _0xe25663) {\n // return _0x39d41e > _0xe25663;\n // },\n // myfEd: function (_0x4d3c7a, _0x6856df) {\n // return _0x4d3c7a !== _0x6856df;\n // },\n // ogkfU: 'lwEdd',\n // QdmeR: 'songinfo',\n // YPnie: 'CeZyJ',\n // IDUmq: 'gutZH',\n // TIdRB: function (_0x2b4f83, _0xd6828b) {\n // return _0x2b4f83 === _0xd6828b;\n // },\n // eKZVG: 'alXbW'\n // };\n\n // try {\n // let artist = musicItem.artist,\n // title = musicItem.title;\n // var reg = /\\(.*?\\)/gis;\n // let matchResult = title.match(reg);\n // (matchResult !== null) &&\n // matchResult[_0x2a4257(0x2f7, \"k30p\")] > 0 &&\n // (_0x36587e[_0x2a4257(0x132, \"1]Wc\")](\n // _0x36587e[_0x2a4257(0x30a, \"AhM)\")],\n // _0x36587e[_0x2a4257(0x43f, \"UP$$\")]\n // )\n // ? _0x268250[_0x2a4257(0x146, \"Mc&5\")](\n // _0x3bc141 +\n // \"=\" +\n // _0x36587e[_0x2a4257(0x376, \"tq2O\")](\n // _0x5dea7c,\n // _0x23b218[_0x21f5b9]\n // )\n // )\n // : (title = title[_0x2a4257(0x153, \"Xq##\")](\n // matchResult[0x0],\n // \"\"\n // )));\n // (matchResult !== null) &&\n // matchResult[_0x2a4257(0x100, \"gqjc\")] > 0x0 &&\n // (title = title[_0x2a4257(0xce, \"jLvN\")](matchResult[0x0], \"\"));\n // artist = artist.replaceAll(\"/\", \",\");\n // let splitResult = artist.split(\",\"),\n // resultArr = [];\n // splitResult.forEach((item) => {\n // let name = chineseSel(item);\n // (name === \"\")\n // ? resultArr.push(item)\n // : resultArr.push(name);\n // });\n // let query = splitResult.join(\"\\x20\") + '-' + title;\n // const res = (\n // await (0, axios_1.default)({\n // method: 'post',\n // url: 'https://zz123.com/ajax/',\n // headers: ZZ123Config.headers,\n // params: {\n // act: 'search',\n // key: query,\n // page: 1,\n // },\n // })\n // ).data;\n // if (\n // _0x36587e[_0x2a4257(0xe1, \"^%hc\")](\n // res[_0x2a4257(0x312, \"C9Gu\")][_0x2a4257(0x1e3, \"3r^q\")],\n // 0x0\n // )\n // ) {\n // let _0x157928 = res[_0x2a4257(0x421, \"YiIZ\")][\n // _0x2a4257(0x174, \"0fr)\")\n // ](\n // (_0x53d159) =>\n // _0x53d159[_0x2a4257(0x4d8, \"X@&D\")] ==\n // musicItem[_0x2a4257(0x22c, \"$Sw1\")] &&\n // _0x53d159[_0x2a4257(0x202, \"xAPG\")] ==\n // musicItem[_0x2a4257(0x206, \"a5UL\")]\n // );\n // if (\n // _0x36587e[_0x2a4257(0x321, \"C9Gu\")](\n // _0x157928[_0x2a4257(0x387, \"jLvN\")],\n // 0x0\n // )\n // ) {\n // if (\n // _0x36587e[_0x2a4257(0x16b, \"%!yu\")](\n // _0x36587e[_0x2a4257(0x38b, \"DJ#n\")],\n // _0x36587e[_0x2a4257(0x38b, \"DJ#n\")]\n // )\n // ) {\n // let _0x4ad043 =\n // _0x2b76f8[_0x2a4257(0x164, \"cgFM\")] + _0x2a4257(0x34b, \"0fr)\"),\n // _0x4407be = _0x191176[_0x2a4257(0x244, \"ESa4\")](\n // _0x36587e[_0x2a4257(0x2d4, \"cgFM\")](\n // new _0x4b0b79()[_0x2a4257(0x32b, \"gqjc\")](),\n // 0x3e8\n // )\n // )[_0x2a4257(0x306, \"hEOB\")](),\n // _0x156142 = {\n // platform: _0x205835[_0x2a4257(0x1a3, \"EzBF\")],\n // third_id: _0x2648cd[_0x2a4257(0x2f8, \"a5UL\")],\n // title: _0x4772e3[_0x2a4257(0x4fd, \"*agp\")],\n // artwork: _0x51ca0f[_0x2a4257(0x310, \"tq2O\")],\n // artist: _0x26b1c4[_0x2a4257(0x471, \"cgFM\")],\n // },\n // _0x2a3dad = {\n // musicInfo: _0x36587e[_0x2a4257(0x12d, \"Mc&5\")](\n // _0x5e573d,\n // _0x4388a9[_0x2a4257(0x2da, \"k30p\")](_0x156142)\n // ),\n // payInfo: _0x36587e[_0x2a4257(0x104, \"PUu(\")](\n // _0x52b7ba,\n // _0x3817c1[_0x2a4257(0x163, \"CC8d\")](_0xe77097)\n // ),\n // time: _0x4407be,\n // };\n // (_0x2a3dad[_0x36587e[_0x2a4257(0x309, \"biLz\")]] = _0x1cc39d[\n // _0x2a4257(0x145, \"IZB8\")\n // ](\n // _0x36587e[_0x2a4257(0x1d3, \"EzBF\")](\n // _0x36587e[_0x2a4257(0x2b2, \"WSxn\")](\n // _0x2a3dad[_0x2a4257(0x176, \"mpeN\")],\n // _0x2a3dad[_0x2a4257(0x363, \"%[Ik\")]\n // ) + _0x36aa2a[_0x2a4257(0xfc, \"fm9T\")],\n // _0x4407be\n // )\n // )[_0x2a4257(0x480, \"Mc&5\")]()),\n // (0x0, _0x3bab1a[_0x2a4257(0x199, \"za4T\")])({\n // method: _0x36587e[_0x2a4257(0x3bc, \"AhM)\")],\n // url: _0x4ad043,\n // data: _0x5f49a6[_0x2a4257(0x47c, \"Mc&5\")](_0x2a3dad),\n // })[_0x2a4257(0x427, \"[RLd\")]((_0x1ac965) => {\n // const _0x284132 = _0x2a4257;\n // _0x140ae4[_0x284132(0x17c, \"G*8K\")](\n // \"\u63d0\u4ea4\",\n // _0x1ac965[_0x284132(0x35a, \"tq2O\")]\n // );\n // });\n // } else {\n // const _0x3bd1fa = (\n // await (0x0, axios_1[_0x2a4257(0x19e, \"HM9^\")])({\n // method: _0x36587e[_0x2a4257(0x385, \"%!yu\")],\n // url: _0x2a4257(0x3ee, \"fm9T\"),\n // headers: ZZ123Config[_0x2a4257(0x3a5, \"AhM)\")],\n // params: {\n // act: _0x36587e[_0x2a4257(0x4d5, \"SvDu\")],\n // id: _0x157928[0x0][\"id\"],\n // },\n // })\n // )[_0x2a4257(0x46c, \"3r^q\")];\n // if ((_0x3bd1fa[_0x2a4257(0x3c7, \"1]Wc\")] = 0xc8))\n // return {\n // url:\n // _0x2a4257(0xcc, \"IZB8\") +\n // _0x3bd1fa[_0x2a4257(0x3ce, \"HM9^\")][_0x2a4257(0x283, \"xAPG\")],\n // };\n // else {\n // if (\n // _0x36587e[_0x2a4257(0x1ba, \"n1oj\")](\n // _0x36587e[_0x2a4257(0x426, \"EzBF\")],\n // _0x36587e[_0x2a4257(0x15f, \"k%k@\")]\n // )\n // ) {\n // let _0x378b0c = [];\n // const _0x40abe8 = /[\\u4e00-\\u9fa5]/g;\n // return (\n // _0x264cad &&\n // (_0x378b0c = _0x10a46e[_0x2a4257(0x1b7, \"ESa4\")](_0x40abe8)),\n // _0x378b0c?.[_0x2a4257(0x4b6, \"75HO\")]\n // ? _0x378b0c[_0x2a4257(0x47f, \"0fr)\")](\"\")\n // : \"\"\n // );\n // } else return { url: \"\" };\n // }\n // }\n // }\n // }\n // return { url: \"\" };\n // } catch (e) {\n // console.log(e)\n // return { url: \"\" };\n // }\n}\n\n\n\nasync function getMusicMigu(musicItem) {\n let artist = musicItem.artist,\n title = musicItem.title,\n enc = encodeURIComponent(artist + \"\\x20\" + title);\n try {\n\n const headers = {\n Accept: 'application/json, text/javascript, */*; q=0.01',\n \"Accept-Encoding\": 'gzip, deflate, br',\n \"Accept-Language\": 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n Connection: 'keep-alive',\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n Host: 'm.music.migu.cn',\n Referer: 'https://m.music.migu.cn/v3/search?keyword=' + encodeURIComponent(enc),\n \"Sec-Fetch-Dest\": 'empty',\n \"Sec-Fetch-Mode\": 'cors',\n \"Sec-Fetch-Site\": 'same-origin',\n \"User-Agent\": 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',\n \"X-Requested-With\": 'XMLHttpRequest',\n },\n params = { keyword: enc, type: 2, pgc: 1, rows: 20 },\n res = await axios_1.default.get('https://m.music.migu.cn/migu/remoting/scr_search_tag', {\n headers: headers,\n params: params,\n });\n if (!res.data.musics) {\n return { url: \"\" };\n }\n let filterResult = res.data.musics.filter((_) => {\n let canPlay = _.mp3 || _.listenUrl || _.lisQq || _.lisCr;\n return (\n canPlay && _.artist === artist\n );\n });\n if (\n filterResult.length > 0\n ) {\n let first = filterResult[0],\n finalUrl = first.mp3 || first.listenUrl || first.lisQq || first.lisCr;\n return { url: finalUrl };\n }\n } catch {\n\n }\n return { url: \"\" };\n}\n\n\n\n\nasync function getMusicFangpi(musicItem, thirdItem) {\n try {\n if (thirdItem) {\n let response2 = (\n await (0x0, axios_1.default)({\n method: 'get',\n url:\n \"https://www.fangpi.net/api/play_url?id=\" +\n thirdItem.third_id +\n '&json=1',\n timeout: 5000,\n })\n ).data;\n if (\n response2.code === 1 &&\n response2.data.url &&\n response2.data.url != \"\"\n ) {\n\n return {\n url: response2.data.url,\n };\n\n }\n }\n let artist = musicItem.artist,\n title = musicItem.title;\n var reg = /\\(.*?\\)/gis;\n let matchResult = title.match(reg);\n\n matchResult != null && (\n matchResult.length > 0\n ) &&\n (title = title.replace(matchResult[0], \"\"));\n artist = artist.replaceAll(\"/\", \",\");\n let artistSplit = artist.split(\",\"),\n resultArr = [];\n artistSplit.forEach((item) => {\n let sel = chineseSel(\n item\n );\n sel === \"\"\n ? resultArr.push(item)\n : resultArr.push(sel);\n });\n let enc = encodeURIComponent(resultArr.join(\"\\x20\") +\n \"\\x20\" +\n title),\n url = 'https://www.fangpi.net/s/' + enc;\n const response = (\n await (0, axios_1.default)({\n url: url,\n method: 'get',\n timeout: 3000,\n })\n ).data;\n var reg1 = /class=\"col-5 col-content\">(.*?)<\\/a>/gis;\n let matchResult1 = response.match(reg1);\n for (const item of matchResult1) {\n let idx = _(\n item.indexOf(\n '/music/'\n ) +\n 7\n ),\n substrItem = item.substring(idx);\n idx = substrItem.indexOf(\"\\x22\");\n let str2 = substrItem.substring(0, idx),\n response2 = (\n await (0, axios_1.default)({\n method: 'get',\n url:\n 'https://www.fangpi.net/api/play_url?id=' + str2 + '&json=1',\n timeout: 5000,\n })\n ).data;\n if (\n response2.code === 1 &&\n response2.data.url &&\n response2.data.url != \"\"\n ) {\n return (\n (thirdItem = {\n platform: 'fangpi',\n third_id: str2,\n }),\n // _0x43e8cc[_0x12b518(0x27e, \"mpeN\")](\n // saveServer,\n // musicItem,\n // thirdItem\n // ),\n {\n url: response2.data.url,\n }\n );\n }\n\n }\n return { url: \"\" };\n } catch {\n return { url: \"\" };\n }\n}\n\n\n\nasync function getMusicSource(musicItem, quality) {\n try {\n if (musicItem.isfree) {\n let source = await getMusicQQ(musicItem, quality);\n if (source) {\n return source;\n }\n }\n let obj = { url: \"\" },\n api = Config.server + \"/api/yun\",\n time = Math.round(Date.now() / 1000).toString(),\n params = {\n platform: Config.platform,\n third_id: musicItem.songmid,\n time: time,\n };\n params.sign = CryptoJs.MD5(params.third_id + Config.key + +time).toString();\n let res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: api,\n data: qs.stringify(params),\n })\n ).data;\n if (res.code !== 1 && res.data.length > 0) {\n let results = res.data;\n for (var result of results) {\n\n if (\n result.platform == 'yun'\n )\n obj = (obj.url === \"\")\n ? await getMusicKuWoApp(\n musicItem,\n result\n )\n : obj;\n else {\n if (\n result.platform === '2t58'\n )\n obj =\n obj.url == \"\"\n ? await getMusic2t58(musicItem, result)\n : obj;\n else if (result.platform === 'fangpi') {\n obj = (obj.url === \"\"\n ? await getMusicFangpi(musicItem, result)\n : obj);\n }\n }\n }\n }\n\n\n return (\n (obj = obj.url === \"\"\n ? await getMusicKuWoApp(\n musicItem,\n null\n )\n : obj),\n (obj = obj.url === \"\"\n ? await getMusic2t58(\n musicItem,\n null\n )\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicZZ123(musicItem)\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicMigu(musicItem)\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicFangpi(\n musicItem,\n null\n )\n : obj),\n obj &&\n obj.url.indexOf(\n 'http'\n ) == -1 && (obj.url = \"\"),\n obj\n );\n } catch (e) {\n // log\n console.log(e)\n }\n}\n\n\n\nasync function getMusicQQ(musicItem, quality) {\n\n let domain = \"\",\n purl = \"\",\n type = '128';\n if (quality === 'standard')\n type = '320';\n else {\n if (\n quality === 'high'\n ) {\n type = 'm4a';\n }\n\n else\n (quality === 'super') && (type = 'flac');\n }\n const result = await getSourceUrl(musicItem.songmid, type);\n\n if (result.req_0 && result.req_0.data && result.req_0.data.midurlinfo) {\n purl = result.req_0.data.midurlinfo[0].purl;\n }\n if (!purl) {\n return null;\n }\n if (domain === \"\") {\n domain =\n result.req_0.data.sip.find((i) => !i.startsWith(\"http://ws\")) ||\n result.req_0.data.sip[0];\n }\n return {\n url: `${domain}${purl}`,\n };\n}\n\n\nmodule.exports = {\n platform: \"QQ\u97f3\u4e50\",\n version: \"0.2.5\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n srcUrl: \"https://gitee.com/maotoumao/plugins-list1/raw/master/qq.js\",\n primaryKey: [\"id\", \"songmid\"],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"artist\") {\n return await searchArtist(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n } else if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n return await getMusicSource(musicItem, quality);\n },\n getLyric: getLyric,\n getAlbumInfo: getAlbumInfo,\n getArtistWorks: getArtistWorks,\n importMusicSheet: importMusicSheet,\n getTopLists: getTopLists,\n getTopListDetail: getTopListDetail,\n getRecommendSheetTags: getRecommendSheetTags,\n getRecommendSheetsByTag: getRecommendSheetsByTag,\n getMusicSheetInfo: getMusicSheetInfo,\n};", "id": "msg_1789568444636"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:44] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ音乐 (非VIP), error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568444636: True [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ音乐 (非VIP) [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易专辑 [2026-09-16 22:20:44] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:44] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 22:20:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 22:20:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 22:20:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 22:20:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 22:20:45] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 22:20:45] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易专辑: [Errno 32] Broken pipe [2026-09-16 22:20:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:20:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:45] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 22:20:45] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 22:20:46] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u54d4\u54e9\u54d4\u54e9", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst dayjs = require(\"dayjs\");\nconst he = require(\"he\");\nconst CryptoJs = require(\"crypto-js\");\nconst { load } = require('cheerio');\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nlet cookie;\nasync function getCid(bvid, aid) {\n const params = bvid\n ? {\n bvid: bvid,\n }\n : {\n aid: aid,\n };\n const cidRes = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/view?%s\", {\n headers: headers,\n params: params,\n })).data;\n return cidRes;\n}\nfunction durationToSec(duration) {\n if (typeof duration === \"number\") {\n return duration;\n }\n if (typeof duration === \"string\") {\n var dur = duration.split(\":\");\n return dur.reduce(function (prev, curr) {\n return 60 * prev + +curr;\n }, 0);\n }\n return 0;\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"application/json, text/plain, */*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n origin: \"https://search.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://search.bilibili.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\",\n};\nasync function getCookie() {\n if (!cookie) {\n cookie = (await axios_1.default.get(\"https://api.bilibili.com/x/frontend/finger/spi\", {\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/114.0.0.0\",\n },\n })).data.data;\n }\n}\nconst pageSize = 20;\nasync function searchBase(keyword, page, searchType) {\n await getCookie();\n const params = {\n context: \"\",\n page: page,\n order: \"\",\n page_size: pageSize,\n keyword: keyword,\n duration: \"\",\n tids_1: \"\",\n tids_2: \"\",\n __refresh__: true,\n _extra: \"\",\n highlight: 1,\n single_column: 0,\n platform: \"pc\",\n from_source: \"\",\n search_type: searchType,\n dynamic_offset: 0,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/search/type\", {\n headers: Object.assign(Object.assign({}, searchHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: params,\n })).data;\n return res.data;\n}\nasync function getFavoriteList(id) {\n const result = [];\n const pageSize = 20;\n let page = 1;\n while (true) {\n try {\n const { data: { data: { medias, has_more }, }, } = await axios_1.default.get(\"https://api.bilibili.com/x/v3/fav/resource/list\", {\n params: {\n media_id: id,\n platform: \"web\",\n ps: pageSize,\n pn: page,\n },\n });\n result.push(...medias);\n if (!has_more) {\n break;\n }\n page += 1;\n }\n catch (error) {\n console.warn(error);\n break;\n }\n }\n return result;\n}\nfunction formatMedia(result) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const title = he.decode((_b = (_a = result.title) === null || _a === void 0 ? void 0 : _a.replace(/(\\)|(\\<\\/em\\>)/g, \"\")) !== null && _b !== void 0 ? _b : \"\");\n return {\n id: (_d = (_c = result.cid) !== null && _c !== void 0 ? _c : result.bvid) !== null && _d !== void 0 ? _d : result.aid,\n aid: result.aid,\n bvid: result.bvid,\n artist: (_e = result.author) !== null && _e !== void 0 ? _e : (_f = result.owner) === null || _f === void 0 ? void 0 : _f.name,\n title,\n alias: (_g = title.match(/\u300a(.+?)\u300b/)) === null || _g === void 0 ? void 0 : _g[1],\n album: (_h = result.bvid) !== null && _h !== void 0 ? _h : result.aid,\n artwork: ((_j = result.pic) === null || _j === void 0 ? void 0 : _j.startsWith(\"//\"))\n ? \"http:\".concat(result.pic)\n : result.pic,\n duration: durationToSec(result.duration),\n tags: (_k = result.tag) === null || _k === void 0 ? void 0 : _k.split(\",\"),\n date: dayjs.unix(result.pubdate || result.created).format(\"YYYY-MM-DD\"),\n };\n}\nasync function searchAlbum(keyword, page) {\n const resultData = await searchBase(keyword, page, \"video\");\n const albums = resultData.result.map(formatMedia);\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(keyword, page) {\n const resultData = await searchBase(keyword, page, \"bili_user\");\n const artists = resultData.result.map((result) => {\n var _a;\n return ({\n name: result.uname,\n id: result.mid,\n fans: result.fans,\n description: result.usign,\n avatar: ((_a = result.upic) === null || _a === void 0 ? void 0 : _a.startsWith(\"//\"))\n ? `https://${result.upic}`\n : result.upic,\n worksNum: result.videos,\n });\n });\n return {\n isEnd: resultData.numResults <= page * pageSize,\n data: artists,\n };\n}\nfunction getMixinKey(e) {\n var t = [];\n return ([\n 46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5,\n 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55,\n 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57,\n 62, 11, 36, 20, 34, 44, 52,\n ].forEach(function (r) {\n e.charAt(r) && t.push(e.charAt(r));\n }),\n t.join(\"\").slice(0, 32));\n}\nfunction hmacSha256(key, message) {\n const hmac = CryptoJs.HmacSHA256(message, key);\n return hmac.toString(CryptoJs.enc.Hex);\n}\nasync function getBiliTicket(csrf) {\n const ts = Math.floor(Date.now() / 1000);\n const hexSign = hmacSha256('XgwSnGZ1p', `ts${ts}`);\n const url = 'https://api.bilibili.com/bapis/bilibili.api.ticket.v1.Ticket/GenWebTicket';\n try {\n const response = await axios_1.default.post(url, null, {\n params: {\n key_id: 'ec02',\n hexsign: hexSign,\n 'context[ts]': ts,\n csrf: csrf || ''\n },\n headers: {\n 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0'\n }\n });\n const data = await response.data;\n return data.data;\n }\n catch (e) {\n throw e;\n }\n}\nlet img, sub, syncedTime;\nasync function getWBIKeys() {\n if (img && sub && syncedTime && syncedTime.getDate() === (new Date()).getDate()) {\n return {\n img,\n sub\n };\n }\n else {\n const data = await getBiliTicket('');\n img = data.nav.img;\n img = img.slice(img.lastIndexOf('/') + 1, img.lastIndexOf('.'));\n sub = data.nav.sub;\n sub = sub.slice(sub.lastIndexOf('/') + 1, sub.lastIndexOf('.'));\n syncedTime = new Date();\n return {\n img,\n sub\n };\n }\n}\nasync function getRid(params) {\n const wbiKeys = await getWBIKeys();\n const npi = wbiKeys.img + wbiKeys.sub;\n const o = getMixinKey(npi);\n const l = Object.keys(params).sort();\n let c = [];\n for (let d = 0, u = /[!'\\(\\)*]/g; d < l.length; ++d) {\n let [h, p] = [l[d], params[l[d]]];\n p && \"string\" == typeof p && (p = p.replace(u, \"\")),\n null != p &&\n c.push(\"\".concat(encodeURIComponent(h), \"=\").concat(encodeURIComponent(p)));\n }\n const f = c.join(\"&\");\n const w_rid = CryptoJs.MD5(f + o).toString();\n return w_rid;\n}\nlet w_webid;\nlet w_webid_date;\nasync function getWWebId(id) {\n if (w_webid && w_webid_date && (Date.now() - w_webid_date.getTime() < 1000 * 60 * 60)) {\n return w_webid;\n }\n const html = (await axios_1.default.get(\"https://space.bilibili.com/\" + id, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n }\n })).data;\n const $ = load(html);\n const content = $(\"#__RENDER_DATA__\").text();\n const jsonContent = JSON.parse(decodeURIComponent(content));\n w_webid = jsonContent.access_id;\n w_webid_date = new Date();\n return w_webid;\n}\nasync function getArtistWorks(artistItem, page, type) {\n const queryHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br, zstd\",\n origin: \"https://space.bilibili.com\",\n \"sec-fetch-site\": \"same-site\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: `https://space.bilibili.com/${artistItem.id}/video`,\n };\n await getCookie();\n const w_webid = await getWWebId(artistItem.id);\n const now = Math.round(Date.now() / 1e3);\n const params = {\n mid: artistItem.id,\n ps: 30,\n tid: 0,\n pn: page,\n web_location: 1550101,\n order_avoided: true,\n order: \"pubdate\",\n keyword: \"\",\n platform: \"web\",\n dm_img_list: \"[]\",\n dm_img_str: \"V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ\",\n dm_cover_img_str: \"QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS\",\n dm_img_inter: '{\"ds\":[],\"wh\":[0,0,0],\"of\":[0,0,0]}',\n w_webid: w_webid,\n wts: now.toString(),\n };\n const w_rid = await getRid(params);\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/space/wbi/arc/search\", {\n headers: Object.assign(Object.assign({}, queryHeaders), { cookie: `buvid3=${cookie.b_3};buvid4=${cookie.b_4}` }),\n params: Object.assign(Object.assign({}, params), { w_rid }),\n })).data;\n console.log(res);\n const resultData = res.data;\n const albums = resultData.list.vlist.map(formatMedia);\n return {\n isEnd: resultData.page.pn * resultData.page.ps >= resultData.page.count,\n data: albums,\n };\n}\nasync function getMediaSource(musicItem, quality) {\n var _a;\n let cid = musicItem.cid;\n if (!cid) {\n cid = (await getCid(musicItem.bvid, musicItem.aid)).data.cid;\n }\n const _params = musicItem.bvid\n ? {\n bvid: musicItem.bvid,\n }\n : {\n aid: musicItem.aid,\n };\n const res = (await axios_1.default.get(\"https://api.bilibili.com/x/player/playurl\", {\n headers: headers,\n params: Object.assign(Object.assign({}, _params), { cid: cid, fnval: 16 }),\n })).data;\n let url;\n if (res.data.dash) {\n const audios = res.data.dash.audio;\n audios.sort((a, b) => a.bandwidth - b.bandwidth);\n switch (quality) {\n case \"low\":\n url = audios[0].baseUrl;\n break;\n case \"standard\":\n url = audios[1].baseUrl;\n break;\n case \"high\":\n url = audios[2].baseUrl;\n break;\n case \"super\":\n url = audios[3].baseUrl;\n break;\n }\n }\n else {\n url = res.data.durl[0].url;\n }\n const hostUrl = url.substring(url.indexOf(\"/\") + 2);\n const _headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.63\",\n accept: \"*/*\",\n host: hostUrl.substring(0, hostUrl.indexOf(\"/\")),\n \"accept-encoding\": \"gzip, deflate, br\",\n connection: \"keep-alive\",\n referer: \"https://www.bilibili.com/video/\".concat((_a = (musicItem.bvid !== null && musicItem.bvid !== undefined\n ? musicItem.bvid\n : musicItem.aid)) !== null && _a !== void 0 ? _a : \"\"),\n };\n return {\n url: url,\n headers: _headers,\n };\n}\nasync function getTopLists() {\n const precious = {\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n data: [\n {\n id: \"popular/precious?page_size=100&page=1\",\n title: \"\u5165\u7ad9\u5fc5\u5237\",\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_history.png\",\n },\n ],\n };\n const weekly = {\n title: \"\u6bcf\u5468\u5fc5\u770b\",\n data: [],\n };\n const weeklyRes = await axios_1.default.get(\"https://api.bilibili.com/x/web-interface/popular/series/list\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36\",\n },\n });\n weekly.data = weeklyRes.data.data.list.slice(0, 8).map((e) => ({\n id: `popular/series/one?number=${e.number}`,\n title: e.subject,\n description: e.name,\n coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_weekly.png\",\n }));\n const boardKeys = [\n {\n id: \"ranking/v2?rid=0&type=all\",\n title: \"\u5168\u7ad9\",\n },\n {\n id: \"ranking/v2?rid=3&type=all\",\n title: \"\u97f3\u4e50\",\n },\n {\n id: \"ranking/v2?rid=1&type=all\",\n title: \"\u52a8\u753b\",\n },\n {\n id: \"ranking/v2?rid=119&type=all\",\n title: \"\u9b3c\u755c\",\n },\n {\n id: \"ranking/v2?rid=168&type=all\",\n title: \"\u56fd\u521b\u76f8\u5173\",\n },\n {\n id: \"ranking/v2?rid=129&type=all\",\n title: \"\u821e\u8e48\",\n },\n {\n id: \"ranking/v2?rid=4&type=all\",\n title: \"\u6e38\u620f\",\n },\n {\n id: \"ranking/v2?rid=36&type=all\",\n title: \"\u77e5\u8bc6\",\n },\n {\n id: \"ranking/v2?rid=188&type=all\",\n title: \"\u79d1\u6280\",\n },\n {\n id: \"ranking/v2?rid=234&type=all\",\n title: \"\u8fd0\u52a8\",\n },\n {\n id: \"ranking/v2?rid=223&type=all\",\n title: \"\u6c7d\u8f66\",\n },\n {\n id: \"ranking/v2?rid=160&type=all\",\n title: \"\u751f\u6d3b\",\n },\n {\n id: \"ranking/v2?rid=211&type=all\",\n title: \"\u7f8e\u98df\",\n },\n {\n id: \"ranking/v2?rid=217&type=all\",\n title: \"\u52a8\u7269\u5708\",\n },\n {\n id: \"ranking/v2?rid=155&type=all\",\n title: \"\u65f6\u5c1a\",\n },\n {\n id: \"ranking/v2?rid=5&type=all\",\n title: \"\u5a31\u4e50\",\n },\n {\n id: \"ranking/v2?rid=181&type=all\",\n title: \"\u5f71\u89c6\",\n },\n {\n id: \"ranking/v2?rid=0&type=origin\",\n title: \"\u539f\u521b\",\n },\n {\n id: \"ranking/v2?rid=0&type=rookie\",\n title: \"\u65b0\u4eba\",\n },\n ];\n const board = {\n title: \"\u6392\u884c\u699c\",\n data: boardKeys.map((_) => (Object.assign(Object.assign({}, _), { coverImg: \"https://s1.hdslb.com/bfs/static/jinkela/popular/assets/icon_rank.png\" }))),\n };\n return [weekly, precious, board];\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(`https://api.bilibili.com/x/web-interface/${topListItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { referer: \"https://www.bilibili.com/\" }),\n });\n return Object.assign(Object.assign({}, topListItem), { musicList: res.data.data.list.map(formatMedia) });\n}\nasync function importMusicSheet(urlLike) {\n var _a, _b, _c, _d;\n let id;\n if (!id) {\n id = (_a = urlLike.match(/^\\s*(\\d+)\\s*$/)) === null || _a === void 0 ? void 0 : _a[1];\n }\n if (!id) {\n id = (_b = urlLike.match(/^(?:.*)fid=(\\d+).*$/)) === null || _b === void 0 ? void 0 : _b[1];\n }\n if (!id) {\n id = (_c = urlLike.match(/\\/playlist\\/pl(\\d+)/i)) === null || _c === void 0 ? void 0 : _c[1];\n }\n if (!id) {\n id = (_d = urlLike.match(/\\/list\\/ml(\\d+)/i)) === null || _d === void 0 ? void 0 : _d[1];\n }\n if (!id) {\n return;\n }\n const musicSheet = await getFavoriteList(id);\n return musicSheet.map((_) => {\n var _a, _b;\n return ({\n id: _.id,\n aid: _.aid,\n bvid: _.bvid,\n artwork: _.cover,\n title: _.title,\n artist: (_a = _.upper) === null || _a === void 0 ? void 0 : _a.name,\n album: (_b = _.bvid) !== null && _b !== void 0 ? _b : _.aid,\n duration: durationToSec(_.duration),\n });\n });\n}\nfunction formatComment(item) {\n var _a, _b, _c, _d, _e;\n return {\n id: item.rpid,\n nickName: (_a = item.member) === null || _a === void 0 ? void 0 : _a.uname,\n avatar: (_b = item.member) === null || _b === void 0 ? void 0 : _b.avatar,\n comment: (_c = item.content) === null || _c === void 0 ? void 0 : _c.message,\n like: item.like,\n createAt: item.ctime * 1000,\n location: ((_e = (_d = item.reply_control) === null || _d === void 0 ? void 0 : _d.location) === null || _e === void 0 ? void 0 : _e.startsWith(\"IP\u5c5e\u5730\uff1a\")) ? item.reply_control.location.slice(5) : undefined\n };\n}\nasync function getMusicComments(musicItem) {\n var _a, _b;\n const params = {\n type: 1,\n mode: 3,\n oid: musicItem.aid,\n plat: 1,\n web_location: 1315875,\n wts: Math.floor(Date.now() / 1000)\n };\n const w_rid = await getRid(params);\n const res = (await (axios_1.default.get(\"https://api.bilibili.com/x/v2/reply/wbi/main\", {\n params: Object.assign(Object.assign({}, params), { w_rid })\n }))).data;\n const data = res.data.replies;\n const comments = [];\n for (let i = 0; i < data.length; ++i) {\n comments[i] = formatComment(data[i]);\n if ((_a = data[i].replies) === null || _a === void 0 ? void 0 : _a.length) {\n comments[i].replies = (_b = data[i]) === null || _b === void 0 ? void 0 : _b.replies.map(formatComment);\n }\n }\n return {\n isEnd: true,\n data: comments\n };\n}\nmodule.exports = {\n platform: \"\u54d4\u54e9\u54d4\u54e9\",\n appVersion: \">=0.0\",\n version: \"0.0.1\",\n author: \"sinmite\",\n cacheControl: \"no-cache\",\n srcUrl: \"https://gitee.com/sinmite/source/raw/master/musicfree/bilibili.js\",\n primaryKey: [\"id\", \"aid\", \"bvid\", \"cid\"],\n hints: {\n importMusicSheet: [\n \"bilibili \u79fb\u52a8\u7aef\uff1aAPP\u70b9\u51fb\u6211\u7684\uff0c\u7a7a\u95f4\uff0c\u53f3\u4e0a\u89d2\u5206\u4eab\uff0c\u590d\u5236\u94fe\u63a5\uff0c\u6d4f\u89c8\u5668\u6253\u5f00\u5207\u6362\u684c\u9762\u7248\u7f51\u7ad9\uff0c\u70b9\u51fb\u64ad\u653e\u5168\u90e8\u89c6\u9891\uff0c\u590d\u5236\u94fe\u63a5\",\n \"bilibili H5/PC\u7aef\uff1a\u590d\u5236\u6536\u85cf\u5939URL\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165ID\u5373\u53ef\",\n \"\u975e\u516c\u5f00\u6536\u85cf\u5939\u65e0\u6cd5\u5bfc\u5165\uff0c\u7f16\u8f91\u6536\u85cf\u5939\u6539\u4e3a\u516c\u5f00\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"artist\"],\n async search(keyword, page, type) {\n if (type === \"album\" || type === \"music\") {\n return await searchAlbum(keyword, page);\n }\n if (type === \"artist\") {\n return await searchArtist(keyword, page);\n }\n },\n getMediaSource,\n async getAlbumInfo(albumItem) {\n var _a;\n const cidRes = await getCid(albumItem.bvid, albumItem.aid);\n const _ref2 = (_a = cidRes === null || cidRes === void 0 ? void 0 : cidRes.data) !== null && _a !== void 0 ? _a : {};\n const cid = _ref2.cid;\n const pages = _ref2.pages;\n let musicList;\n if (pages.length === 1) {\n musicList = [Object.assign(Object.assign({}, albumItem), { cid: cid })];\n }\n else {\n musicList = pages.map(function (_) {\n return Object.assign(Object.assign({}, albumItem), { cid: _.cid, title: _.part, duration: durationToSec(_.duration), id: _.cid });\n });\n }\n return {\n musicList,\n };\n },\n getArtistWorks,\n getTopLists,\n getTopListDetail,\n importMusicSheet,\n getMusicComments\n};", "id": "msg_1789568446524"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 哔哩哔哩, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568446524: True [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 哔哩哔哩 [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613\u97f3\u4e50", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 30;\n// \u97f3\u8d28\u53c2\u6570\nconst qualityMap = {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\",\n /*\n \"standard\": \"128k\u6807\u51c6\u97f3\u8d28\",\n \"higher\": \"192k\u9ad8\u54c1\u97f3\u8d28\",\n \"exhigh\": \"320k\u6781\u9ad8\u97f3\u8d28\",\n \"lossless\": \"flac\u65e0\u635f\u97f3\u8d28\",\n \"hires\": \"Hi-Res\u97f3\u8d28\",\n \"jyeffect\": \"\u9ad8\u6e05\u73af\u7ed5\",\n \"sky\": \"\u6c89\u6d78\u73af\u7ed5\", // SVIP\n \"jymaster\": \"\u8d85\u6e05\u6bcd\u5e26\", // SVIP\n */\n};\n\n\n\n// \u5b9e\u73b0 eapi \u8bf7\u6c42\nfunction MD5(data) {\n return CryptoJs.MD5(data)\n .toString(CryptoJs.enc.Hex);\n}\n\nfunction AES(data) {\n let key = CryptoJs.enc.Utf8.parse(\"e82ckenh8dichen8\");\n let text = CryptoJs.enc.Utf8.parse(data);\n return CryptoJs.AES.encrypt(text, key, {\n mode: CryptoJs.mode.ECB,\n padding: CryptoJs.pad.Pkcs7\n }).ciphertext.toString(CryptoJs.enc.Hex);\n}\nasync function EAPI(path, json = {}) {\n\n let params = [path, JSON.stringify(json)];\n params.push(MD5(\n \"nobody\" +\n params.join(\"use\") +\n \"md5forencrypt\"\n ));\n params = AES(params.join(\"-36cd479b6b5-\"));\n\n let { // \u83b7\u53d6\u7528\u6237\u6570\u636e\n music_u\n } = env && env.getUserVariables();\n let music_a = String(music_u || \"\").match(/(MUSIC_[UA]=|^)([^;]+)/i)\n music_u = \"os=pc; appver=9.0.25; \" + (music_a ? \"MUSIC_U=\" + music_a[1] : \"MUSIC_U=0034B44F9926BE9F1DD236BFB146E0FEB27696AD0802E2DD8D8062B036AD87CEEEB49D3141C00C103A8B110C944E6DFA2909843C098EB2515B513BC1AA0A7974866D653BEA27F81BF15700FB398CB95ABE260EDA0E71900A46296E8E9C069B6C6A3509D1FDE9F41DCEF55B07BEE0990EE13F8A461098536FF86896E76892551CC5B8C6C2063E605639146CEF24D2904725876F53C57B442653EA13ACFE9F2653B512A23BABE01680F2E953AF4BE1602B38B39B38B1D6D5C50E1F84AAF323D841A717DECDF9E0834EF1703C1D4A37DE7DB3AC49FA2A2C397B3418C34FAF191ED064E4F266D94A281B0C08947F339929EE1896350C37FE1E007D32BE2E0C1970DD2161A0D87F4A95CEA5B111289EC1064555149DBEEFBF73A1397D5B24EB5B429D81C8CBDB2A7DF61BECFAB3DBA3BD165167\");\n // console.log(path + music_u);\n return (await (0, axios_1.default)({\n url: path.replace(\"/\", \"https://interface3.music.163.com/e\"),\n method: \"POST\",\n data: \"params=\" + params.toUpperCase(),\n headers: {\n authority: \"music.163.com\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n Cookie: music_u\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u4fe1\u606f\nfunction formatMusicItem(_) {\n _ = _.baseInfo || _.song || _;\n let name = _.name || _.songname;\n let singer = _.ar && _.ar.map(_ => _.name).join('&') || \"\";\n let albumName = _.al && _.al.name;\n let albumId = (_.al && _.al.id) || \"\";\n let picUrl = (_.al && _.al.picUrl) || \"\";\n let qualities = {};\n for (let k of ['l', 'h', 'sq', 'hr']) {\n if (_[k] || (k == 'l' && _[k = 'm'])) {\n let t = {\n 'm': \"low\",\n 'l': \"low\", //192k\n 'h': \"standard\",\n 'sq': \"high\",\n 'hr': \"super\"\n } [k];\n qualities[t] = {};\n qualities[t].size = _[k].size;\n // qualities[t].url = \"\";\n }\n }\n let content = ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? 0 : 1;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u6b4c\u66f2\u7c7b\u522b\u2606 0\u514d\u8d39 1\u4ed8\u8d39 */\n type: ((_.fee == 0 || _.fee == 8) && (_.privilege ? (_.privilege.st > -1) : 1)) ? \"0\" : \"1\",\n /* \u6b4c\u66f2\u5728\u5e73\u53f0\u7684\u552f\u4e00\u7f16\u53f7 */\n id: String(_.id || \"\") || undefined,\n\n /* \u4f5c\u8005 */\n artist: singer,\n /* \u6807\u9898 */\n title: name,\n /* \u522b\u540d */\n // alias: \"\",\n /* \u65f6\u957f(s) */\n duration: _.dt,\n /* \u4e13\u8f91\u540d */\n album: albumName,\n /* \u4e13\u8f91\u5c01\u9762\u56fe */\n artwork: picUrl,\n /* \u97f3\u8d28\u4fe1\u606f */\n qualities,\n /* \u5176\u4ed6\u4fe1\u606f\u2606 */\n albumId,\n artistId: _.ar && _.ar.map(_ => _.id).join('&'), //\u6b4c\u624bid\n vid: _.mv || undefined, //\u89c6\u9891id video\n rid: _.dj && _.dj.id, //\u64ad\u5ba2id radio\n\n /* \u9ed8\u8ba4\u97f3\u6e90 */\n // url: `http://music.163.com/song/media/outer/url?id=${songId}.mp3`\n /* \u97f3\u6e90 */\n // source?: Partial>\n /* \u6b4c\u8bcd\u6587\u672c */\n rawLrc: _.lyrics,\n }\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u5355\u4fe1\u606f\nfunction formatSheetItem(_) {\n _ = _.baseInfo || _;\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 2\u6b4c\u5355 3\u699c\u5355 4\u4e13\u8f91 */\n type: \"2\",\n /* \u6b4c\u5355id */\n id: _.id || _.resourceId,\n /* \u6807\u9898 */\n title: _.name || _.title,\n /* \u4f5c\u8005 */\n artist: (_.artist && _.artist.name) || (_.creator && _.creator.nickname),\n /* \u5c01\u9762\u56fe */\n // coverImg: \"\",\n artwork: _.coverImgUrl || _.picUrl || _.coverImg || _.coverUrl,\n /* \u63cf\u8ff0 */\n description: _.description || _.updateFrequency,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.trackCount || (_.artist && _.artist.musicSize),\n /* \u5176\u4ed6\u53c2\u6570 */\n playCount: _.playCount,\n date: dayjs.unix((_.updateTime || _.publishTime) / 1000).format(\"YYYY-MM-DD\"),\n createUserId: _.userId,\n createTime: _.createTime,\n content: 2\n };\n}\n// \u683c\u5f0f\u5316\u699c\u5355\u4fe1\u606f\nfunction formatToplistItem(_) {\n _ = formatSheetItem(_);\n _.coverImg = _.artwork;\n _.type = \"3\" // 3\u699c\u5355\n return _;\n}\n// \u683c\u5f0f\u5316\u4e13\u8f91\u4fe1\u606f\nfunction formatAlbumItem(_) {\n _ = formatSheetItem(_);\n _.type = \"4\" // 4\u4e13\u8f91\n return _;\n}\n\n// \u683c\u5f0f\u5316\u6b4c\u624b\u4fe1\u606f\nfunction formatArtistItem(_) {\n return {\n /* \u96b6\u5c5e\u63d2\u4ef6 */\n // platform: \"\u7f51\u6613\u97f3\u4e50\",\n /* \u5206\u7ec4\u7c7b\u522b\u2606 5\u6b4c\u624b */\n type: \"5\",\n /* \u6b4c\u624bid */\n id: _.id,\n /* \u6807\u8bc62 - \u4f18\u5148\u83b7\u53d6\u2729 */\n // mid,\n /* \u6b4c\u624b\u540d\u79f0 */\n name: _.name,\n /* \u4f5c\u8005\u540d\u79f0 */\n // artist: _.name,\n /* \u5934\u50cf */\n avatar: _.img1v1Url || _.picUrl,\n /* \u7b80\u4ecb */\n description: _.briefDesc || _.description,\n /* \u4f5c\u54c1\u603b\u6570 */\n worksNum: _.albumSize || _.musicSize,\n /* \u7c89\u4e1d\u6570 */\n // fans: 0,\n /* \u5176\u4ed6\u53c2\u6570 */\n };\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u66f2\u8be6\u60c5\nasync function getMusicInfo(musicItem) {\n let isObj = !Array.isArray(musicItem);\n if (isObj) {\n musicItem = [musicItem];\n }\n musicItem = musicItem.map(_ => ({\n id: _.id\n }));\n\n let _ = await EAPI(\"/api/v3/song/detail\", {\n c: JSON.stringify(musicItem)\n });\n\n if (isObj) {\n let a = _.songs[0] || _.privileges[0];\n a.privilege = _.privileges[0];\n return formatMusicItem(a);\n } else {\n return _.songs.map((__, i) => {\n __.privilege = _.privileges[i];\n return __;\n });\n }\n}\n\n// \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\nasync function getMusicSheetInfo(sheet, page = 1) {\n let _ = (await EAPI(\"/api/v6/playlist/detail\", {\n n: 99999,\n id: sheet.id\n })).playlist;\n let isEnd, list = _.tracks || [];\n if (list.length == _.trackCount || list.length == _.trackIds.length) {\n isEnd = true;\n } else {\n let len1 = page * pageSize;\n let len2 = len1 - pageSize;\n let _ids = _.trackIds.slice(len2, len1);\n isEnd = len1 >= _.trackCount;\n list = await getMusicInfo(_ids);\n }\n return {\n isEnd: isEnd,\n sheetItem: formatSheetItem(_),\n musicList: list.map(formatMusicItem)\n };\n}\n\n// \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\nasync function getAlbumInfo(albumItem) {\n let res = await EAPI(\"/api/v1/album/\" + albumItem.id, {});\n return {\n isEnd: true,\n albumItem: formatAlbumItem(res.album),\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\n// \u83b7\u53d6\u6b4c\u624b\u8be6\u60c5\nasync function getArtistWorks(artistItem, page, type) {\n let T = {\n \"music\": {\n \"path1\": \"/api/v1/artist/\",\n \"path2\": \"hotSongs\",\n \"mapJs\": formatMusicItem\n },\n \"album\": {\n \"path1\": \"/api/artist/albums/\",\n \"path2\": \"hotAlbums\",\n \"mapJs\": formatAlbumItem\n },\n } [type];\n let res = await EAPI(T.path1 + artistItem.id, {});\n return {\n isEnd: true,\n artistItem: formatArtistItem(res.artist),\n data: res[T.path2].map(T.mapJs),\n };\n}\n\n\n\n// \u83b7\u53d6\u6392\u884c\u699c\u5206\u7c7b\nasync function getTopLists() {\n let group1 = [];\n let group2 = await EAPI(\"/api/toplist/detail/v2\", {});\n group2.data.map(_ => {\n if (_.list && _.list.length) {\n let group3 = [];\n _.list.map(_ => {\n if (_.id != 0) group3.push(formatToplistItem(_));\n });\n group1.push({\n title: _.name,\n data: group3\n });\n }\n });\n return group1;\n}\n// \u83b7\u53d6\u699c\u5355\u8be6\u60c5\uff0c\u7f51\u6613\u4e91\u53ef\u4ee5\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\nasync function getTopListDetail(topListItem) {\n let res = await getMusicSheetInfo(topListItem);\n res.topListItem = res.sheetItem;\n res.topListItem.type = \"3\";\n return res;\n}\n\n\n\n// \u83b7\u53d6\u6b4c\u5355\u5206\u7c7b\nasync function getRecommendSheetTags() {\n let group1 = [{\n title: \"\u63a8\u8350\",\n id: \"_SPECIAL_CLOUD_VILLAGE_PLAYLIST\"\n },\n {\n title: \"\u5b98\u65b9\",\n id: \"\u5b98\u65b9\"\n },\n {\n title: \"\u96f7\u8fbe\",\n id: \"_RADAR\"\n },\n {\n title: \"\u539f\u521b\",\n id: \"_SPECIAL_ORIGIN_SONG_LOCATION\"\n },\n {\n title: \"\u5fc3\u60c5\",\n id: \"_FEELING_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u573a\u666f\",\n id: \"_SCENE_PLAYLIST_LOCATION\"\n },\n {\n title: \"\u4e13\u5c5e\",\n id: \"_COMBINATION\"\n },\n {\n title: \"\u5168\u90e8\",\n id: \"\u5168\u90e8\u6b4c\u5355\"\n },\n {\n title: \"\u65b0\u70ed\",\n id: \"_NEW_SONG_AND_ALBUM\"\n },\n {\n title: \"\u5f71\u89c6\",\n id: \"_FIRM_PLAYLIST\"\n },\n {\n title: \"\u5956\u9879\",\n id: \"_AWARDS_PLAYLIST\"\n },\n ];\n let group2 = [\"\u8bed\u79cd\", \"\u98ce\u683c\", \"\u573a\u666f\", \"\u60c5\u611f\", \"\u4e3b\u9898\"]\n .map(name => {\n return ({\n title: name,\n data: []\n });\n });\n let group3 = await EAPI(\"/api/playlist/catalogue/v1\", {});\n group3.sub.map(_ => {\n group2[_.category].data.push({\n title: _.name,\n id: _.name\n });\n });\n return {\n pinned: group1,\n data: group2,\n };\n}\n// \u901a\u8fc7\u5206\u7c7b\u83b7\u53d6\u6b4c\u5355\u5217\u8868\nasync function getRecommendSheetsByTag(tag, page) {\n let _, t1 = tag === null || tag === void 0 || (tag && tag.id);\n if (t1 === \"\" || t1 === true) { // \u9ed8\u8ba4\n _ = await EAPI(\"/api/personalized/playlist\", {\n limit: 30\n }, {\n Cookie: \"\"\n });\n } else if (/^_[A-Z]+/.test(t1)) { // \u63a8\u8350\n _ = (await EAPI(\"/api/link/page/rcmd/resource/show\", {\n \"pageCode\": \"HOME_RECOMMEND_PAGE\",\n \"isFirstScreen\": \"false\",\n \"cursor\": \"6\",\n \"refresh\": \"true\",\n \"blockCodeOrderList\": `[\"PAGE_RECOMMEND${t1}\"]`\n })).data.blocks[0].dslData;\n _ = (_.home_page_common_playlist_module_d1r94fwj80 || _.home_page_scene_playlist_module_w5rp24j0x2 || _.home_page_scene_playlist_module_rsoa9pd6fn || _).blockResource;\n } else {\n _ = await EAPI(\"/api/playlist/list\", {\n cat: t1 || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n });\n }\n let list = _.result || _.playlists || _.resources || [];\n let total1 = page * pageSize;\n let total2 = _.total || (total1 - pageSize + list.length);\n return {\n isEnd: (_.more !== true) || (total2 <= total1),\n data: list.map(formatSheetItem)\n };\n}\n\n\n\n// \u5339\u914d\u6b4c\u5355\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u6b4c\u5355\u8be6\u60c5\u51fd\u6570\n// \u9700\u8981\u8fd4\u56de\u5217\u8868\uff0c\u83b7\u53d6musicList\nasync function importMusicSheet(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/playlist(\\/|.*?[\\?\\&]id=)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n \n // \u624b\u52a8\u904d\u5386\u6b4c\u5355\u6570\u636e\n let e = 0;\n let page = 1;\n let list = [];\n do {\n try {\n let {\n isEnd,\n musicList\n } = await getMusicSheetInfo({\n id\n }, page);\n list.push(...musicList);\n if (isEnd) {\n break;\n }\n } catch (err) {\n if (e > 3) {\n break;\n } else {\n page--;\n e++;\n }\n }\n } while (page++);\n return list;\n}\n\n\n\n// \u5339\u914d\u5355\u66f2\u94fe\u63a5\uff0c\u8df3\u8f6c\u5230\u5355\u66f2\u8be6\u60c5\u51fd\u6570\nasync function importMusicItem(urlLike) {\n let id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id && !urlLike.match(/music\\.163\\.com/i)) {\n return false;\n }\n if (!id) {\n id = (urlLike.match(/song(.*?[\\?\\&]id=|\\/)(\\d+)/i) || [])[2];\n }\n if (!id) {\n return false;\n }\n return await getMusicInfo({\n id\n });\n}\n\n\n\n// \u83b7\u53d6\u5728\u7ebf\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n let res = await EAPI(\"/api/song/lyric\", {\n id: musicItem.id,\n lv: -1,\n kv: -1,\n tv: -1\n });\n return {\n /* \u6b4c\u8bcdURL */\n // lrc: \"\",\n /* \u7eaf\u6587\u672c\u6b4c\u8bcd */\n rawLrc: res.lrc.lyric,\n /* \u6ca1\u6709\u65f6\u95f4\u6233\u7684 \u7eaf\u6587\u672c\u6b4c\u8bcd */\n // rawLrcTxt: \"\",\n /* \u7eaf\u6587\u672c\u683c\u5f0f\u7684\u7ffb\u8bd1 */\n // translation: \"\",\n /* \u65f6\u95f4 s */\n // time: 0,\n /* \u4e0b\u6807 */\n // index: 0,\n };\n}\n\n\n\n// \u83b7\u53d6\u64ad\u653e\u94fe\u63a5\nasync function getMediaSource(musicItem, quality) {\n if (!musicItem.qualities[quality]) {\n return false\n }\n let _ = (await EAPI(\"/api/song/enhance/player/url/v1\", {\n ids: `[\"${musicItem.id}\"]`,\n encodeType: \"flac\",\n immerseType: \"c51\",\n trialMode: \"23\", // \u8bd5\u542c\n level: qualityMap[quality]\n })).data;\n if (_ && _[0] && _[0].url) {\n return {\n url: String(_[0].url).split(\"?\")[0],\n size: _[0].size,\n quality,\n // userAgent: \"\",\n // headers: {},\n };\n }\n if (_ && _[0] && _[0].code == 404) { // \u7070\u8272\u6b4c\u66f2\n return await KUWO(musicItem, quality);\n } else {\n return await getMediaProxys(musicItem, quality, 0);\n }\n}\n\n\n\n// \u4ece\u89e3\u6790\u83b7\u53d6\u94fe\u63a5 (lx-music-api-server)\n// \u57fa\u4e8e https://github.com/lxmusics/lx-music-api-server \u5b9e\u73b0\u7684\u4e94\u4e2a\u516c\u76ca\u97f3\u6e90\nasync function getMediaProxys(musicItem, quality, err_i = 0) {\n let lxQuality = {\n low: \"128k\",\n high: \"320k\",\n lossless: \"flac\",\n super: \"flac24bit\"\n } [quality];\n let url, rawLrc, artwork, res;\n try {\n switch (String(err_i)) {\n case \"0\": // By: ikun0014\n // \u53cd\u9988\u7fa4\u7ec4: https://t.me/ikunshare_qun\n // MusicFree: https://api.ikunshare.com/subscription_\u5361\u5bc6.json\n // LX Music: https://api.ikunshare.com/script?key=\u5361\u5bc6\n let { // \u83b7\u53d6\u5bc6\u5319\n ikun_key\n } = env && env.getUserVariables();\n res = (\n await axios_1.default.get(`https://api.ikunshare.com/url`, {\n params: {\n source: \"wy\",\n songId: musicItem.id,\n quality: lxQuality\n },\n headers: {\n \"X-Request-Key\": ikun_key || \"\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url\n };\n break;\n case \"1\": // By: \u5fae\u4fe1\u516c\u4f17\u53f7@\u5143\u529b\u83cc\n // \u53cd\u9988\u7fa4\u7ec4\uff1anull\n // MusicFree: https://13413.kstore.vip/yuanli/\u5143\u529b\u97f3\u4e50.json\n // LX Music: null\n res = (\n await axios_1.default.get(`https://music.haitangw.cc/music/wy.php`, {\n params: {\n level: {\n \"low\": \"standard\",\n \"standard\": \"exhigh\",\n \"high\": \"lossless\",\n \"super\": \"hires\"\n } [quality],\n id: musicItem.id\n }\n })\n ).data;\n url = res.data.url;\n if (url) return {\n rawLrc: res.data.lrc,\n url\n }\n break;\n case \"4\": // By: Huibq\n // \u53cd\u9988\u7fa4\u7ec4\uff1ahttps://t.me/+Xh7BWUUPqUZlMDU1\n // MusicFree: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/myPlugins.json\n // LX Music: https://fastly.jsdelivr.net/gh/Huibq/keep-alive/render_api.js\n res = (\n await axios_1.default.get(`https://lxmusicapi.onrender.com/url/wy/${musicItem.id}/${ quality==\"low\"?\"128k\":\"320k\" }`, {\n headers: {\n \"X-Request-Key\": \"share-v2\",\n \"User-Agent\": \"lx-music-mobile/2.0.0\"\n }\n })\n ).data;\n url = res.url;\n if (url) return {\n url,\n }\n break;\n }\n } catch (err) {}\n if (err_i < 5) {\n return await getMediaProxys(musicItem, quality, err_i + 1);\n } else {\n return await KUWO(musicItem, quality);\n }\n}\n\n\n\n// \u83b7\u53d6\u7070\u8272\u6b4c\u66f2\nasync function KUWO(musicItem, quality) {\n let {\n source\n } = env && env.getUserVariables();\n let params = {\n // \u5fc5\u8981\u53c2\u6570\n rformat: \"json\", // \u8fd4\u56de\u683c\u5f0f\n encoding: \"utf8\", // \u7f16\u7801\u65b9\u5f0f\n ft: \"music\", // \u641c\u7d22\u7c7b\u578b\n rn: 30, // \u83b7\u53d630\u4e2a\n pn: 0, // \u5f53\u524d\u9875\u6570\n all: musicItem.title, // \u641c\u7d22\u7684\u5173\u952e\u8bcd\n\n itemset: \"web_2013\",\n client: \"kt\",\n pcjson: 1\n };\n // \u6b64\u53c2\u6570\u5b58\u5728\u65f6\u4f1a\u8fd4\u56devip\u6b4c\u66f2\n if (source) params.vipver = \"MUSIC_8.0.3.0_BCS75\"\n\n // \u641c\u7d22\n var songId;\n let sou = (await (0, axios_1.default)({\n method: \"get\",\n url: \"http://search.kuwo.cn/r.s\",\n params\n })).data.abslist;\n for (let _ of sou) {\n if (!_.SONGNAME.match('\u7247\u6bb5')) {\n songId = _.MUSICRID.split('_')[1].split('&')[0];\n break;\n };\n }\n // console.log(songId);\n\n // \u83b7\u53d6\n let res = (await axios_1.default.get(\"http://nmobi.kuwo.cn/mobi.s\", {\n params: {\n f: \"web\",\n source: source,\n user: 0,\n type: \"convert_url_with_sign\",\n rid: songId,\n br: {\n \"low\": \"128kmp3\",\n \"standard\": \"320kmp3\",\n \"high\": \"2000kflac\",\n \"super\": \"20000kflac\",\n } [quality],\n },\n headers: {\n \"User-Agent\": \"okhttp/4.10.0\"\n }\n })).data;\n // console.log(res);\n return {\n url: res.data.url.split(\"?\")[0],\n quality\n }\n}\n\n\n\n\n\n// \u683c\u5f0f\u5316\u6b4c\u66f2\u8bc4\u8bba\nfunction formatComment(_) {\n return {\n id: _.commentId,\n // \u7528\u6237\u540d\n nickName: _.user && _.user.nickname,\n // \u5934\u50cf\n avatar: _.user && _.user.avatarUrl,\n // \u8bc4\u8bba\u5185\u5bb9\n comment: _.content,\n // \u70b9\u8d5e\u6570\n like: _.likedCount,\n // \u8bc4\u8bba\u65f6\u95f4\n createAt: _.time,\n // \u5730\u5740\n location: _.ipLocation && _.ipLocation.location,\n // \u56de\u590d\n replies: (_.beReplied || []).map(formatComment),\n /* \u5176\u4ed6\u53c2\u6570 */\n type: \"6\"\n };\n}\n// \u83b7\u53d6\u6b4c\u66f2\u8bc4\u8bba\nasync function getMusicComments(musicItem, page = 1) {\n let res = (await EAPI(\"/api/v2/resource/comments\", {\n \"threadId\": \"R_SO_4_\" + musicItem.id,\n \"cursor\": \"20\",\n \"sortType\": \"1\",\n \"pageNo\": page,\n \"pageSize\": pageSize + \"\",\n \"parentCommentld\": \"0\",\n \"showlnner\": false\n })).data;\n return {\n isEnd: res.hasMore != true,\n data: res.comments.map(formatComment)\n }\n}\n\n\n\n// \u641c\u7d22\u51fd\u6570\nasync function searchBase(query, page, type, v1 = \"\") {\n let path = \"/api\" + v1 + \"/search/\" + (/\\//.test(type) ? type : (type + \"/get\"));\n let data = {\n \"filterCode\": \"-1\",\n \"offset\": ((page - 1) * pageSize) + \"\",\n \"limit\": pageSize + \"\",\n \"channel\": \"typing\",\n \"keyword\": query,\n \"scene\": \"normal\",\n \"s\": query,\n };\n let res = await EAPI(path, data);\n return res.data || res.result;\n}\nmodule.exports = {\n platform: \"\u7f51\u6613\u97f3\u4e50\",\n author: '\u53cd\u9988Q\u7fa4@365976134',\n version: \"2025.09.14\",\n appVersion: \">0.4.0-alpha.0\",\n srcUrl: \"https://raw.githubusercontent.com/ThomasBy2025/musicfree/refs/heads/main/plugins/wy.js\",\n cacheControl: \"no-store\",\n description: \"## By: Thomas\u55b2 \\n#### \u7248\u672c: 2025.09.14 \\n\u4fee\u590d\u6b4c\u5355\u53ea\u80fd\u83b7\u53d610\u9996\u6b4c\u7684bug\uff0c\u7ec6\u8282\u8c03\u6574 \\n\u4fee\u590d\u9177\u6211\u6e20\u9053\uff0c\u589e\u52a0\u89e3\u6790 \\n#### \u97f3\u6e90\u91cd\u5b9a\u5411 \\n\u652f\u6301\u7684\u63d2\u4ef6\u5982\u4e0b \\n\u7f51\u6613\u4e91\u97f3\u4e50, \u5c0f\u82b8\u97f3\u4e50, \u7b80\u7e41\u97f3\u4e50, \u5143\u529bWY \\n#### Bug\u53cd\u9988 \\n[\u70b9\u6211\u52a0\u5165\u53cd\u9988\u7fa4](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=x8r6m0bYYon_pCgT0BRc1ohwZmkkY61Q&authKey=DpmUioCvx45WjRRBnbRT2DsJ7LL6DNY3uau%2BFKPgR%2FSKz4EgYqUjEU5tJNi%2BkNPl&noverify=0&group_code=365976134) \\n#### \u652f\u6301\u4f5c\u8005 \\n![\u652f\u6301\u4f5c\u8005](https://raw.githubusercontent.com/ThomasBy2025/hikerview/refs/heads/main/mm_facetoface_collect_qrcode_1757315185814.png)\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\"\n ],\n importMusicItem: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\"\n ]\n },\n userVariables: [{\n key: \"music_u\",\n name: \"\u7528\u6237\u6570\u636e(cookie)\",\n hint: \"MUSIC_U \u6216 MUSIC_A\"\n }, {\n key: \"ikun_key\",\n name: \"ikun\u97f3\u6e90\u5361\u5bc6\",\n hint: \"key\"\n }, {\n key: \"source\",\n name: \"\u9177\u6211\u767d\u540d\u5355\u6e20\u9053\",\n hint: \"source\"\n }],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n let stype = {\n music: {\n t: \"song\",\n m: formatMusicItem,\n },\n album: {\n t: type,\n c: \"4\",\n v: \"/v1\",\n m: formatAlbumItem,\n },\n artist: {\n t: type,\n c: \"5\",\n v: \"/v1\",\n m: formatArtistItem,\n },\n sheet: {\n t: \"playlist\",\n c: \"2\",\n m: formatSheetItem,\n },\n lyric: {\n t: \"resource/lyric\",\n m: formatMusicItem\n }\n } [type];\n let _ = await searchBase(query, page, stype.t, stype.v);\n let list = _.resources || _.albums || _.artists || [];\n let total1 = page * pageSize\n let total2 = _.songCount || _.playlistCount || _.albumCount || _.totalCount || (total1 - pageSize + list.length);\n return {\n isEnd: total2 <= total1,\n data: list.map(stype.m)\n }\n },\n importMusicSheet,\n importMusicItem,\n getMusicInfo,\n getAlbumInfo,\n getArtistWorks,\n getMusicSheetInfo,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMediaSource,\n getLyric,\n getMusicComments,\n};", "id": "msg_1789568447127"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568447127: True [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易音乐 [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u8bcd\u5343\u5bfb", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nasync function search(query, page, type) {\n if (type !== 'lyric') {\n return;\n }\n const result = (await axios_1.default.get('https://so.lrcgc.com/', {\n params: {\n q: query,\n }\n })).data;\n const $ = (0, cheerio_1.load)(result);\n const results = $('.resultWrap').children();\n const data = [];\n if (results.first().prop('tagName') === 'DL') {\n const title = results.first().find('dt > a');\n const desc = results.first().find('dd > small');\n const descText = desc.text().replace(/[\\s|\\n]/g, '').split(/[\u6b4c\u624b\uff1a|\u4e13\u8f91:]/).filter(it => it.trim() !== '');\n data.push({\n title: title.text(),\n id: title.attr('href'),\n artist: descText === null || descText === void 0 ? void 0 : descText[0],\n album: descText === null || descText === void 0 ? void 0 : descText[1]\n });\n }\n return {\n isEnd: true,\n data\n };\n}\nasync function getLyric(musicItem) {\n const res = (await axios_1.default.get(musicItem.id)).data;\n const $ = (0, cheerio_1.load)(res);\n const rawLrc = $('p#J_lyric').text().replace(/\\n/g, '');\n return {\n rawLrc: rawLrc,\n };\n}\nmodule.exports = {\n platform: \"\u6b4c\u8bcd\u5343\u5bfb\",\n version: \"0.0.0\",\n srcUrl: 'https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciqianxun/index.js',\n cacheControl: \"no-store\",\n supportedSearchType: ['lyric'],\n search,\n getLyric\n};", "id": "msg_1789568447429"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌词千寻, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568447429: True [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌词千寻 [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易bimiao [2026-09-16 22:20:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613bimiao", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163\\.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\"\n};\nasync function getMediaSource(musicItem, quality) {\n const qualityMap = {\n '128k': 'standard',\n '320k': 'standard',\n 'flac': 'lossless',\n 'hires': 'hires',\n 'flac24bit': 'hires'\n };\n const targetQuality = qualityLevels[quality] || '128k';\n const apiQuality = qualityMap[targetQuality] || 'standard';\n const res = (\n await axios_1.default.get(\n `https://www.cunyuapi.top/163music_play?id=${musicItem.id}&quality=${apiQuality}`\n )\n ).data;\n return {\n url: res.song_file_url\n };\n}\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\nmodule.exports = {\n platform: \"\u7f51\u6613(bimiao\u97f3\u6e90)\",\n author: \"\u73a5\u7136OvO\",\n version: \"1.1\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E7%BD%91%E6%98%93bimiao.js\",\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568447730"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易bimiao, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568447730: True [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易bimiao [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力MG [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5143\u529bMG", "code": "var _0xodX='jsjiami.com.v7';'use strict';const _0xf8f7bb=_0x3c16;(function(_0x5f5c3f,_0x1d74b2,_0x2c3384,_0xb62dfc,_0x20e94c,_0x537c3e,_0x155947){return _0x5f5c3f=_0x5f5c3f>>0x3,_0x537c3e='hs',_0x155947='hs',function(_0x8b5b46,_0x1e8549,_0x24230c,_0x29e4d0,_0x2f8409){const _0x19b859=_0x3c16;_0x29e4d0='tfi',_0x537c3e=_0x29e4d0+_0x537c3e,_0x2f8409='up',_0x155947+=_0x2f8409,_0x537c3e=_0x24230c(_0x537c3e),_0x155947=_0x24230c(_0x155947),_0x24230c=0x0;const _0x536cb9=_0x8b5b46();while(!![]&&--_0xb62dfc+_0x1e8549){try{_0x29e4d0=parseInt(_0x19b859(0x2fa,'&bNV'))/0x1+parseInt(_0x19b859(0x315,'!1Vz'))/0x2+-parseInt(_0x19b859(0x225,'074w'))/0x3*(parseInt(_0x19b859(0x30c,'z2wA'))/0x4)+-parseInt(_0x19b859(0x333,'uQLh'))/0x5+-parseInt(_0x19b859(0x252,'R1QV'))/0x6+parseInt(_0x19b859(0x1d3,'pxE9'))/0x7+parseInt(_0x19b859(0x25e,'cbSJ'))/0x8;}catch(_0x25cfe6){_0x29e4d0=_0x24230c;}finally{_0x2f8409=_0x536cb9[_0x537c3e]();if(_0x5f5c3f<=_0xb62dfc)_0x24230c?_0x20e94c?_0x29e4d0=_0x2f8409:_0x20e94c=_0x2f8409:_0x24230c=_0x2f8409;else{if(_0x24230c==_0x20e94c['replace'](/[lWXrBnPSRDufItOgdJF=]/g,'')){if(_0x29e4d0===_0x1e8549){_0x536cb9['un'+_0x537c3e](_0x2f8409);break;}_0x536cb9[_0x155947](_0x2f8409);}}}}}(_0x2c3384,_0x1d74b2,function(_0xe57ec8,_0x31f0b5,_0x1ed7df,_0x350a86,_0x27c099,_0x253e89,_0x5600ea){return _0x31f0b5='\\x73\\x70\\x6c\\x69\\x74',_0xe57ec8=arguments[0x0],_0xe57ec8=_0xe57ec8[_0x31f0b5](''),_0x1ed7df='\\x72\\x65\\x76\\x65\\x72\\x73\\x65',_0xe57ec8=_0xe57ec8[_0x1ed7df]('\\x76'),_0x350a86='\\x6a\\x6f\\x69\\x6e',(0x1c839c,_0xe57ec8[_0x350a86](''));});}(0x668,0xa28db,_0xec71,0xcf),_0xec71)&&(_0xodX=0xcf);Object['defineProperty'](exports,_0xf8f7bb(0x2d0,'B8zN'),{'value':!![]});const axios_1=require(_0xf8f7bb(0x139,'(O2j')),cheerio_1=require(_0xf8f7bb(0x1fc,'@6WI')),CryptoJS=require('crypto-js'),searchRows=0x14;async function searchBase(_0x13774f,_0x45b0b1,_0x293606){const _0x8da1da=_0xf8f7bb,_0x37ce28={'KpBTl':_0x8da1da(0x1b1,'g*M0'),'miFEh':_0x8da1da(0x121,'074w'),'SABHW':_0x8da1da(0x20b,'qdOw'),'rOnUn':'same-origin','ICuDn':_0x8da1da(0x31f,'&bNV'),'wCUGZ':'XMLHttpRequest'},_0x36e049={'Accept':_0x8da1da(0x277,'R1QV'),'Accept-Encoding':_0x37ce28[_0x8da1da(0x240,'#xe!')],'Accept-Language':_0x37ce28[_0x8da1da(0x34b,'NEtV')],'Connection':_0x8da1da(0x1ed,'g*M0'),'Content-Type':'application/x-www-form-urlencoded;\\x20charset=UTF-8','Host':_0x8da1da(0x322,'&v!^'),'Referer':'https://m.music.migu.cn/v3/search?keyword='+encodeURIComponent(_0x13774f),'Sec-Fetch-Dest':_0x37ce28[_0x8da1da(0x2f8,'074w')],'Sec-Fetch-Mode':_0x8da1da(0x1ae,'&bNV'),'Sec-Fetch-Site':_0x37ce28['rOnUn'],'User-Agent':_0x37ce28['ICuDn'],'X-Requested-With':_0x37ce28[_0x8da1da(0x27b,'uQLh')]},_0x3f3740={'keyword':_0x13774f,'type':_0x293606,'pgc':_0x45b0b1,'rows':searchRows},_0x26c04b=await axios_1[_0x8da1da(0x33a,'YkUc')][_0x8da1da(0x22d,'vLqW')](_0x8da1da(0x24c,'pxE9'),{'headers':_0x36e049,'params':_0x3f3740});return _0x26c04b[_0x8da1da(0x309,'ybp[')];}function musicCanPlayFilter(_0x587330){const _0x4f4a35=_0xf8f7bb;return _0x587330[_0x4f4a35(0x2c6,'B8zN')]||_0x587330['listenUrl']||_0x587330['lisQq']||_0x587330[_0x4f4a35(0x190,'O&CZ')];}async function searchMusic(_0x158156,_0x4000b1){const _0x43349b=_0xf8f7bb,_0x597a00={'SjTTW':function(_0x37041d,_0x4f9312,_0x2559a8,_0x14cafe){return _0x37041d(_0x4f9312,_0x2559a8,_0x14cafe);},'YXnIf':function(_0x466023,_0x465d28){return _0x466023*_0x465d28;}},_0x7f81fb=await _0x597a00[_0x43349b(0x25d,'beCd')](searchBase,_0x158156,_0x4000b1,0x2),_0xbb41b5=_0x7f81fb[_0x43349b(0x32c,'cbSJ')]['map'](_0x955421=>({'id':_0x955421['id'],'artwork':_0x955421[_0x43349b(0x154,'(@fk')],'title':_0x955421[_0x43349b(0x1f0,'4]*n')],'artist':_0x955421['artist'],'album':_0x955421[_0x43349b(0x1ba,'N(3m')],'url':musicCanPlayFilter(_0x955421),'copyrightId':_0x955421['copyrightId'],'singerId':_0x955421[_0x43349b(0x2a5,'oQSE')]}));return{'isEnd':_0x597a00[_0x43349b(0x338,'&v!^')](+_0x7f81fb['pageNo'],searchRows)>=_0x7f81fb[_0x43349b(0x181,'mqfL')],'data':_0xbb41b5};}async function searchAlbum(_0x3fd2f4,_0x32ac68){const _0x1da917=_0xf8f7bb,_0x182ee6={'ifoTc':function(_0xcb47d5,_0x43f03a,_0x5c014b,_0x4bcbb4){return _0xcb47d5(_0x43f03a,_0x5c014b,_0x4bcbb4);},'IyaVn':function(_0x408452,_0x322926){return _0x408452>=_0x322926;},'kIySy':function(_0xdf3291,_0x3c00b7){return _0xdf3291*_0x3c00b7;}},_0x48f96e=await _0x182ee6[_0x1da917(0x319,'g*M0')](searchBase,_0x3fd2f4,_0x32ac68,0x4),_0x4500fc=_0x48f96e['albums']['map'](_0x3d61b8=>({'id':_0x3d61b8['id'],'artwork':_0x3d61b8[_0x1da917(0x16d,'8eHD')],'title':_0x3d61b8[_0x1da917(0x168,'z2wA')],'date':_0x3d61b8['publishDate'],'artist':(_0x3d61b8['singer']||[])['map'](_0x1254e8=>_0x1254e8[_0x1da917(0x2f0,'O&CZ')])[_0x1da917(0x25a,'vPiR')](','),'singer':_0x3d61b8[_0x1da917(0x26c,'*IV]')],'fullSongTotal':_0x3d61b8[_0x1da917(0x298,'lRP9')]}));return{'isEnd':_0x182ee6['IyaVn'](_0x182ee6[_0x1da917(0x1e4,'&v!^')](+_0x48f96e[_0x1da917(0x2a1,'(5n]')],searchRows),_0x48f96e[_0x1da917(0x143,'uQLh')]),'data':_0x4500fc};}async function searchArtist(_0x199753,_0x45122f){const _0xa47cd=_0xf8f7bb,_0x580028={'Ogezx':function(_0x52f187,_0x5dd31e,_0x284ce1,_0x32bc89){return _0x52f187(_0x5dd31e,_0x284ce1,_0x32bc89);},'nCDYM':function(_0x1cc8b7,_0x959a8b){return _0x1cc8b7>=_0x959a8b;}},_0x1b1dfd=await _0x580028['Ogezx'](searchBase,_0x199753,_0x45122f,0x1),_0x4e6a7c=_0x1b1dfd[_0xa47cd(0x2aa,'Hm9a')][_0xa47cd(0x1f9,'@6WI')](_0x23a5ba=>({'name':_0x23a5ba[_0xa47cd(0x2c8,'8E03')],'id':_0x23a5ba['id'],'avatar':_0x23a5ba[_0xa47cd(0x2bb,'wq[T')],'worksNum':_0x23a5ba['songNum']}));return{'isEnd':_0x580028[_0xa47cd(0x1c1,'4Cwv')](+_0x1b1dfd[_0xa47cd(0x33e,'N(3m')]*searchRows,_0x1b1dfd[_0xa47cd(0x2d4,'&bNV')]),'data':_0x4e6a7c};}async function searchMusicSheet(_0x574c34,_0xd74236){const _0x3a4298=_0xf8f7bb,_0x332160={'GjzKn':function(_0x53b5e0,_0x1199a7,_0x3b72ed,_0x161175){return _0x53b5e0(_0x1199a7,_0x3b72ed,_0x161175);},'EBFKi':function(_0x1c2b5a,_0x1d2f09){return _0x1c2b5a>=_0x1d2f09;},'vqssP':function(_0x1aa0b3,_0x57a8c7){return _0x1aa0b3*_0x57a8c7;}},_0x1e97ae=await _0x332160[_0x3a4298(0x1f8,'Zt*u')](searchBase,_0x574c34,_0xd74236,0x6),_0x4f3ab5=_0x1e97ae['songLists'][_0x3a4298(0x128,'gGIG')](_0x3d6790=>({'title':_0x3d6790['name'],'id':_0x3d6790['id'],'artist':_0x3d6790[_0x3a4298(0x330,'R1QV')],'artwork':_0x3d6790[_0x3a4298(0x174,'vLqW')],'description':_0x3d6790[_0x3a4298(0x244,'(@fk')],'worksNum':_0x3d6790['musicNum'],'playCount':_0x3d6790['playNum']}));return{'isEnd':_0x332160[_0x3a4298(0x1ea,'ML8n')](_0x332160[_0x3a4298(0x32b,'dmfG')](+_0x1e97ae['pageNo'],searchRows),_0x1e97ae['pgt']),'data':_0x4f3ab5};}async function searchLyric(_0x2e1dc4,_0x149d0a){const _0x415fc1=_0xf8f7bb,_0x33d548={'FYKxN':function(_0x2bd442,_0x510984,_0x4438d1,_0x223929){return _0x2bd442(_0x510984,_0x4438d1,_0x223929);},'QOBnP':function(_0x38b284,_0x4f3183){return _0x38b284>=_0x4f3183;},'PlstZ':function(_0x1ddba0,_0x38ec26){return _0x1ddba0*_0x38ec26;}},_0x187f20=await _0x33d548[_0x415fc1(0x272,'4]*n')](searchBase,_0x2e1dc4,_0x149d0a,0x7),_0x573fba=_0x187f20['songs']['map'](_0x522037=>({'title':_0x522037['title'],'id':_0x522037['id'],'artist':_0x522037[_0x415fc1(0x1d1,'ML8n')],'artwork':_0x522037[_0x415fc1(0x176,'cbSJ')],'lrc':_0x522037[_0x415fc1(0x120,'lRP9')],'album':_0x522037[_0x415fc1(0x1a6,'8E03')],'copyrightId':_0x522037['copyrightId']}));return{'isEnd':_0x33d548[_0x415fc1(0x230,'O&CZ')](_0x33d548[_0x415fc1(0x275,'5o5K')](+_0x187f20[_0x415fc1(0x27a,'074w')],searchRows),_0x187f20['pgt']),'data':_0x573fba};}async function getArtistAlbumWorks(_0x389b8,_0xca1a1a){const _0x3392c8=_0xf8f7bb,_0x387984={'eMJCU':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','qLUMQ':_0x3392c8(0x1a7,'TiPS'),'ovlCg':_0x3392c8(0x12b,'!1Vz'),'cSrZX':_0x3392c8(0x189,'8E03'),'PrWiG':'music.migu.cn','IyCXO':_0x3392c8(0x213,'4]*n'),'bwONI':_0x3392c8(0x335,'HiVL'),'eyGUm':function(_0x350580,_0x56236a){return _0x350580(_0x56236a);},'PatJU':_0x3392c8(0x280,'pxE9'),'oGBak':function(_0x5df99c,_0x289441){return _0x5df99c<_0x289441;},'KIGZA':_0x3392c8(0x259,'oQSE'),'kVeZE':_0x3392c8(0x196,'N(3m'),'MiEHC':_0x3392c8(0x12c,'R1QV'),'VdACD':_0x3392c8(0x15b,'Zt*u'),'gAgeg':'.pagination-next','WNdHg':_0x3392c8(0x1ca,'lRP9')},_0x3991a7={'accept':_0x387984['eMJCU'],'accept-encoding':_0x387984[_0x3392c8(0x2df,'!1Vz')],'accept-language':_0x387984[_0x3392c8(0x23b,'iktx')],'connection':_0x387984['cSrZX'],'host':_0x387984['PrWiG'],'referer':_0x387984[_0x3392c8(0x197,'*IV]')],'user-agent':_0x3392c8(0x273,'dzCs'),'Cache-Control':_0x387984[_0x3392c8(0x2e3,'pxE9')]},_0x104092=(await axios_1[_0x3392c8(0x281,'oQSE')][_0x3392c8(0x21a,'dmfG')]('https://music.migu.cn/v3/music/artist/'+_0x389b8['id']+_0x3392c8(0x2dd,'gGIG')+_0xca1a1a,{'headers':_0x3991a7}))['data'],_0x3e4daf=(0x0,cheerio_1['load'])(_0x104092),_0x268ce5=_0x387984['eyGUm'](_0x3e4daf,_0x387984[_0x3392c8(0x33d,'vLqW')])[_0x3392c8(0x28f,'!1Vz')]('li'),_0x1aa0e1=[];for(let _0x41bfe9=0x0;_0x387984['oGBak'](_0x41bfe9,_0x268ce5[_0x3392c8(0x2c1,'qdOw')]);++_0x41bfe9){const _0x132a31=_0x3e4daf(_0x268ce5[_0x41bfe9]),_0x54022d=_0x132a31['find'](_0x3392c8(0x165,'wq[T'))[_0x3392c8(0x1cd,'(@fk')](_0x387984[_0x3392c8(0x21e,'R1QV')]);_0x1aa0e1[_0x3392c8(0x1e2,'gSmV')]({'id':_0x132a31[_0x3392c8(0x2cd,'dzCs')](_0x387984[_0x3392c8(0x1fe,'dzCs')])[_0x3392c8(0x200,'HiVL')](_0x387984[_0x3392c8(0x136,'beCd')]),'title':_0x132a31[_0x3392c8(0x142,'Sn%L')](_0x387984['VdACD'])[_0x3392c8(0x287,'074w')](),'artwork':_0x54022d[_0x3392c8(0x218,'gSmV')]('//')?'https:'+_0x54022d:_0x54022d,'date':'','artist':_0x389b8[_0x3392c8(0x13d,'oQSE')]});}return{'isEnd':_0x3e4daf(_0x387984[_0x3392c8(0x283,'4]*n')])[_0x3392c8(0x2e4,'ML8n')](_0x387984['WNdHg']),'data':_0x1aa0e1};}async function getArtistWorks(_0x1b13ea,_0x82cc72,_0x4297ed){const _0x29a2ec=_0xf8f7bb,_0x513dc9={'DkduZ':function(_0x17160f,_0x30d67d){return _0x17160f===_0x30d67d;},'KmFqb':'music','CbEVb':_0x29a2ec(0x2ea,'(@fk'),'uAgIY':'gzip,\\x20deflate,\\x20br','WRtNB':'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6','LBxJw':_0x29a2ec(0x11f,'cbSJ'),'STqUT':_0x29a2ec(0x1f6,'iktx'),'fcaJz':_0x29a2ec(0x310,'lRP9'),'tDKlz':_0x29a2ec(0x23a,'Zt*u'),'QIvvq':_0x29a2ec(0x347,'ML8n'),'aaUPG':_0x29a2ec(0x25c,'&bNV'),'UtIzM':function(_0x18747a,_0x571cf1){return _0x18747a-_0x571cf1;},'ydKZW':function(_0x30ffcd,_0x383775){return _0x30ffcd===_0x383775;},'dKXsc':'album','KweUM':function(_0x4c2b42,_0x3f99e9,_0x1a4bea){return _0x4c2b42(_0x3f99e9,_0x1a4bea);}};if(_0x513dc9[_0x29a2ec(0x1c2,'&v!^')](_0x4297ed,_0x513dc9[_0x29a2ec(0x241,'wq[T')])){const _0x287550={'Accept':_0x513dc9[_0x29a2ec(0x285,'&bNV')],'Accept-Encoding':_0x513dc9['uAgIY'],'Accept-Language':_0x513dc9[_0x29a2ec(0x255,'074w')],'Connection':_0x513dc9[_0x29a2ec(0x1df,'&bNV')],'Content-Type':'application/x-www-form-urlencoded;\\x20charset=UTF-8','Host':_0x513dc9['STqUT'],'Referer':_0x29a2ec(0x1ff,'NEtV')+_0x1b13ea['id'],'Sec-Fetch-Dest':_0x29a2ec(0x18f,'pxE9'),'Sec-Fetch-Mode':_0x513dc9[_0x29a2ec(0x2e8,'pxE9')],'Sec-Fetch-Site':_0x29a2ec(0x13a,'!1Vz'),'User-Agent':_0x513dc9['tDKlz'],'X-Requested-With':_0x513dc9[_0x29a2ec(0x2c4,'4Cwv')]},_0x391eb0=(await axios_1[_0x29a2ec(0x175,'U*Jw')][_0x29a2ec(0x2ca,'N(3m')](_0x513dc9['aaUPG'],{'headers':_0x287550,'params':{'artistId':_0x1b13ea['id'],'pageSize':0x14,'pageNo':_0x513dc9[_0x29a2ec(0x2a4,'4]*n')](_0x82cc72,0x1)}}))[_0x29a2ec(0x1b6,'YkUc')]||{};return{'data':_0x391eb0[_0x29a2ec(0x16e,'4Cwv')][_0x29a2ec(0x279,'dzCs')]['map'](_0x53f462=>({'id':_0x53f462[_0x29a2ec(0x236,'NEtV')],'artwork':_0x53f462[_0x29a2ec(0x194,'ML8n')],'title':_0x53f462['songName'],'artist':(_0x53f462['singerName']||[])[_0x29a2ec(0x18d,'ybp[')](',\\x20'),'album':_0x53f462[_0x29a2ec(0x226,'(5n]')],'url':musicCanPlayFilter(_0x53f462),'rawLrc':_0x53f462['lyricLrc'],'copyrightId':_0x53f462[_0x29a2ec(0x1fb,'g*M0')],'singerId':_0x53f462['singerId']}))};}else{if(_0x513dc9[_0x29a2ec(0x217,'pxE9')](_0x4297ed,_0x513dc9[_0x29a2ec(0x30e,'vPiR')]))return _0x513dc9[_0x29a2ec(0x20a,'&bNV')](getArtistAlbumWorks,_0x1b13ea,_0x82cc72);}}async function getLyric(_0x3ab43c){const _0x44d8dc=_0xf8f7bb,_0x2c8ad2={'ThINn':_0x44d8dc(0x32e,'U*Jw'),'YFEYp':'keep-alive','sdCCH':'application/x-www-form-urlencoded;\\x20charset=UTF-8','RUHGe':_0x44d8dc(0x210,'(5n]'),'VQSfL':'Mozilla/5.0\\x20(Linux;\\x20Android\\x206.0.1;\\x20Moto\\x20G\\x20(4))\\x20AppleWebKit/537.36\\x20(KHTML,\\x20like\\x20Gecko)\\x20Chrome/89.0.4389.114\\x20Mobile\\x20Safari/537.36\\x20Edg/89.0.774.68','hsQhs':_0x44d8dc(0x193,'Zt*u'),'Sewxg':_0x44d8dc(0x224,'lRP9')},_0x4787b9={'Accept':_0x44d8dc(0x229,'&bNV'),'Accept-Encoding':'gzip,\\x20deflate,\\x20br','Accept-Language':_0x2c8ad2[_0x44d8dc(0x179,'beCd')],'Connection':_0x2c8ad2[_0x44d8dc(0x21f,'YkUc')],'Content-Type':_0x2c8ad2[_0x44d8dc(0x235,'!1Vz')],'Host':_0x44d8dc(0x1a5,'ML8n'),'Referer':_0x44d8dc(0x23e,'8eHD')+_0x3ab43c[_0x44d8dc(0x147,'!1Vz')],'Sec-Fetch-Dest':_0x44d8dc(0x158,'vPiR'),'Sec-Fetch-Mode':'cors','Sec-Fetch-Site':_0x2c8ad2[_0x44d8dc(0x22f,'aJQ]')],'User-Agent':_0x2c8ad2['VQSfL'],'X-Requested-With':_0x2c8ad2['hsQhs']},_0x5d59b9=(await axios_1[_0x44d8dc(0x2e0,'mqfL')]['get'](_0x2c8ad2['Sewxg'],{'headers':_0x4787b9,'params':{'cpid':_0x3ab43c[_0x44d8dc(0x144,'oQSE')]}}))[_0x44d8dc(0x2e6,'uQLh')];return{'rawLrc':_0x5d59b9['data'][_0x44d8dc(0x31b,'ybp[')]};}async function getMusicSheetInfo(_0xd2c3dd,_0x3de9c6){const _0x442970=_0xf8f7bb,_0x826e5d={'cWdPL':function(_0x28d568,_0x2511b8){return _0x28d568===_0x2511b8;},'QITtX':function(_0x5abc4d,_0x217079){return _0x5abc4d===_0x217079;},'ezsnl':_0x442970(0x294,'(@fk'),'MoAmE':function(_0x5c5002,_0x33edb8){return _0x5c5002===_0x33edb8;},'FpYLE':function(_0x594957,_0x1c4ca5){return _0x594957===_0x1c4ca5;},'rJHyN':function(_0xd2801f,_0x55696d){return _0xd2801f!==_0x55696d;},'dLXdi':function(_0x5cd004,_0x13dfd1){return _0x5cd004===_0x13dfd1;},'BQBaF':function(_0x4a035f,_0x125ffb){return _0x4a035f===_0x125ffb;},'XBcnZ':function(_0xe94cd8,_0x3314b0){return _0xe94cd8===_0x3314b0;},'FSfjJ':function(_0x4887b1,_0xf0fde){return _0x4887b1===_0xf0fde;},'eLzbI':function(_0x332fee,_0x404aa3){return _0x332fee!==_0x404aa3;},'oJtVO':function(_0xa14be9,_0x525d35){return _0xa14be9===_0x525d35;},'QcKEJ':_0x442970(0x269,'Hm9a'),'SSPhb':'m.music.migu.cn'},_0x43b65f=(await axios_1[_0x442970(0x2d7,'4Cwv')][_0x442970(0x326,'!1Vz')](_0x826e5d[_0x442970(0x34a,'8E03')],{'params':{'palylistId':_0xd2c3dd['id'],'pageNo':_0x3de9c6,'pageSize':0x1e},'headers':{'Host':_0x826e5d[_0x442970(0x248,'vPiR')],'referer':'https://m.music.migu.cn/v4/music/playlist/','By':'7242bd16f68cd9b39c54a8e61537009f','User-Agent':_0x442970(0x14c,'HiVL')}}))[_0x442970(0x2cb,'*IV]')][_0x442970(0x163,'aJQ]')];if(!_0x43b65f)return{'isEnd':!![],'musicList':[]};const _0x4cad27=_0x43b65f[_0x442970(0x334,'mqfL')]<0x1e;return{'isEnd':_0x4cad27,'musicList':_0x43b65f['items'][_0x442970(0x29e,'mqfL')](_0x1d1577=>{const _0x3056f0=_0x442970,_0x368f0d={'aITTs':function(_0xca45fa,_0x5a1385){return _0x826e5d['cWdPL'](_0xca45fa,_0x5a1385);},'CCSeH':function(_0x459d81,_0x51ec84){return _0x826e5d['cWdPL'](_0x459d81,_0x51ec84);},'Smvve':function(_0x290945,_0x43c544){return _0x826e5d['QITtX'](_0x290945,_0x43c544);}};if(_0x826e5d[_0x3056f0(0x2f5,'Sn%L')](_0x826e5d[_0x3056f0(0x337,'PA0Y')],_0x826e5d[_0x3056f0(0x2f4,'B8zN')])){var _0x4729c9;return _0x826e5d[_0x3056f0(0x222,'Sn%L')]((_0x4729c9=_0x1d1577===null||_0x826e5d[_0x3056f0(0x183,'R1QV')](_0x1d1577,void 0x0)?void 0x0:_0x1d1577[_0x3056f0(0x2c5,'YkUc')])===null||_0x4729c9===void 0x0?void 0x0:_0x4729c9[_0x3056f0(0x22c,'B8zN')],0x0);}else{var _0x4e1923,_0x55bff0,_0x308c11,_0x3117eb,_0x1f9fca,_0x30e739,_0x3f04e0,_0x4255ca,_0x4d30c2,_0x901ccb;return{'id':_0x2a0f92['id'],'artwork':((_0x4e1923=_0x4680b5[_0x3056f0(0x205,'8eHD')])===null||_0x368f0d[_0x3056f0(0x162,'O&CZ')](_0x4e1923,void 0x0)?void 0x0:_0x4e1923[_0x3056f0(0x30f,'vPiR')]('//'))?_0x3056f0(0x296,'N81[')+_0x2d5fc2['mediumPic']:_0x420b58[_0x3056f0(0x270,'g*M0')],'title':_0x142826[_0x3056f0(0x24f,'iktx')],'artist':(_0x30e739=(_0x1f9fca=_0x368f0d[_0x3056f0(0x26e,'HiVL')](_0x3117eb=_0x368f0d[_0x3056f0(0x21d,'qdOw')](_0x308c11=_0x368f0d[_0x3056f0(0x314,'R1QV')](_0x55bff0=_0x3f69a9[_0x3056f0(0x132,'mqfL')],null)||_0x368f0d[_0x3056f0(0x2d2,'8eHD')](_0x55bff0,void 0x0)?void 0x0:_0x55bff0[_0x3056f0(0x13e,'dzCs')],null)||_0x368f0d[_0x3056f0(0x25b,'&bNV')](_0x308c11,void 0x0)?void 0x0:_0x308c11[_0x3056f0(0x28d,'lRP9')](_0x55bff0,_0x3b17cf=>_0x3b17cf[_0x3056f0(0x2a7,'PA0Y')]),null)||_0x3117eb===void 0x0?void 0x0:_0x3117eb[_0x3056f0(0x2ef,'z2wA')])===null||_0x1f9fca===void 0x0?void 0x0:_0x1f9fca['call'](_0x3117eb,','))!==null&&_0x30e739!==void 0x0?_0x30e739:'','album':(_0x4255ca=(_0x3f04e0=_0x1d7ffd[_0x3056f0(0x2be,'PA0Y')])===null||_0x3f04e0===void 0x0?void 0x0:_0x3f04e0[_0x3056f0(0x214,'HiVL')])!==null&&_0x4255ca!==void 0x0?_0x4255ca:'','copyrightId':_0x388fb7[_0x3056f0(0x1fb,'g*M0')],'singerId':(_0x901ccb=_0x368f0d[_0x3056f0(0x278,'8eHD')](_0x4d30c2=_0x444dce['singers'],null)||_0x368f0d[_0x3056f0(0x293,'aJQ]')](_0x4d30c2,void 0x0)?void 0x0:_0x4d30c2[0x0])===null||_0x901ccb===void 0x0?void 0x0:_0x901ccb['id']};}})[_0x442970(0x2a2,'(O2j')](_0x5a4057=>{const _0x581b6f=_0x442970;var _0x4ca43b,_0x4e3675,_0xf2028b,_0x35bd45,_0x54593f,_0x3e62cf,_0x12e36,_0x161df2,_0x5ac0d7,_0x3bbdb1;return{'id':_0x5a4057['id'],'artwork':(_0x826e5d[_0x581b6f(0x1fd,'U*Jw')](_0x4ca43b=_0x5a4057[_0x581b6f(0x2c0,'iktx')],null)||_0x4ca43b===void 0x0?void 0x0:_0x4ca43b['startsWith']('//'))?_0x581b6f(0x19e,'uQLh')+_0x5a4057[_0x581b6f(0x13c,'&v!^')]:_0x5a4057[_0x581b6f(0x172,'(O2j')],'title':_0x5a4057[_0x581b6f(0x2f7,'B8zN')],'artist':_0x826e5d[_0x581b6f(0x182,'#xe!')](_0x3e62cf=_0x826e5d[_0x581b6f(0x1fd,'U*Jw')](_0x54593f=_0x826e5d[_0x581b6f(0x302,'8eHD')](_0x35bd45=_0x826e5d[_0x581b6f(0x2b2,'HiVL')](_0xf2028b=(_0x4e3675=_0x5a4057['singers'])===null||_0x826e5d['QITtX'](_0x4e3675,void 0x0)?void 0x0:_0x4e3675[_0x581b6f(0x2a6,'Zt*u')],null)||_0xf2028b===void 0x0?void 0x0:_0xf2028b['call'](_0x4e3675,_0x36f5a5=>_0x36f5a5['name']),null)||_0x826e5d[_0x581b6f(0x169,'N81[')](_0x35bd45,void 0x0)?void 0x0:_0x35bd45[_0x581b6f(0x124,'4]*n')],null)||_0x826e5d[_0x581b6f(0x15f,'beCd')](_0x54593f,void 0x0)?void 0x0:_0x54593f[_0x581b6f(0x204,'NEtV')](_0x35bd45,','),null)&&_0x826e5d[_0x581b6f(0x2cf,'(5n]')](_0x3e62cf,void 0x0)?_0x3e62cf:'','album':_0x826e5d[_0x581b6f(0x2b8,'oQSE')](_0x161df2=_0x826e5d[_0x581b6f(0x263,'wq[T')](_0x12e36=_0x5a4057['album'],null)||_0x826e5d[_0x581b6f(0x27e,'mqfL')](_0x12e36,void 0x0)?void 0x0:_0x12e36[_0x581b6f(0x164,'beCd')],null)&&_0x826e5d['eLzbI'](_0x161df2,void 0x0)?_0x161df2:'','copyrightId':_0x5a4057[_0x581b6f(0x343,'z2wA')],'singerId':_0x826e5d['XBcnZ'](_0x3bbdb1=_0x826e5d[_0x581b6f(0x1f3,'ybp[')](_0x5ac0d7=_0x5a4057[_0x581b6f(0x219,'B8zN')],null)||_0x5ac0d7===void 0x0?void 0x0:_0x5ac0d7[0x0],null)||_0x3bbdb1===void 0x0?void 0x0:_0x3bbdb1['id']};})};}async function importMusicSheet(_0x521e22){const _0x28a2f7=_0xf8f7bb,_0x2619c9={'FRjxI':function(_0x5bb38d,_0x544ba9){return _0x5bb38d===_0x544ba9;},'wdTpb':function(_0x2b39a2,_0x150d77){return _0x2b39a2===_0x150d77;},'sVFyW':_0x28a2f7(0x257,'N81['),'BIKaI':_0x28a2f7(0x21c,'iktx'),'YOhch':function(_0x1b60e5,_0x496e38){return _0x1b60e5<_0x496e38;},'GGyFZ':_0x28a2f7(0x17b,'YkUc'),'PdPCz':_0x28a2f7(0x31d,'Zt*u'),'XIMFJ':_0x28a2f7(0x247,'NEtV'),'eEKwH':_0x28a2f7(0x146,'074w'),'FSluq':_0x28a2f7(0x2b9,'beCd'),'wtvso':_0x28a2f7(0x1d5,'YkUc'),'qAnRx':_0x28a2f7(0x312,'4Cwv'),'ADlkb':_0x28a2f7(0x2eb,'4Cwv'),'UHCYw':_0x28a2f7(0x2b5,'dmfG'),'TIzjr':_0x28a2f7(0x22a,'ybp['),'WmCaC':_0x28a2f7(0x253,'beCd'),'hhlpD':'https://cdnmusic.migu.cn/tycms_picture/20/08/231/200818095104122_327x327_4971.png','AYrma':'hktw','ZICeI':'eur_usa','mvJrQ':_0x28a2f7(0x1e0,'!1Vz'),'dGuAb':_0x28a2f7(0x307,'5o5K'),'kVgTC':_0x28a2f7(0x2ee,'vPiR'),'RWMpy':'\u65e5\u97e9\u699c','hHXZw':'https://cdnmusic.migu.cn/tycms_picture/20/08/231/200818095259569_327x327_4628.png','EVCoc':_0x28a2f7(0x17c,'ybp['),'sSvpg':'\u5f69\u94c3\u699c','RpXFy':_0x28a2f7(0x203,'lRP9'),'EGYAF':_0x28a2f7(0x260,'8eHD'),'cKCRL':_0x28a2f7(0x1d0,'ybp['),'CclID':'https://cdnmusic.migu.cn/tycms_picture/20/08/231/200818095414420_327x327_4992.png','qqqdY':_0x28a2f7(0x1be,'8eHD'),'UZPhh':_0x28a2f7(0x216,'PA0Y'),'mlFZI':function(_0x168d83,_0x767561){return _0x168d83(_0x767561);},'NFtKJ':'.album-play','VYhxn':'.album-name','dlCyj':function(_0x2b2822,_0x33ea03){return _0x2b2822(_0x33ea03);},'piwDI':function(_0x1e9b59,_0x1ecbca){return _0x1e9b59===_0x1ecbca;},'wDaRb':function(_0x5cc154,_0x277b76){return _0x5cc154===_0x277b76;},'ssCyj':function(_0x123d0e,_0x1219a7){return _0x123d0e===_0x1219a7;},'FZYIX':function(_0x16d989,_0x12e921){return _0x16d989===_0x12e921;},'ACuAk':function(_0x29afc9,_0x1c7b73){return _0x29afc9===_0x1c7b73;},'oEOnx':function(_0x1749e2,_0x373154){return _0x1749e2===_0x373154;},'AxKHy':'yrtBj','Qavkg':_0x28a2f7(0x1d8,'(@fk'),'IafQy':_0x28a2f7(0x20e,'cbSJ'),'wcrCn':'c.migu.cn','tswUB':function(_0xc364cd,_0x4eb8f5){return _0xc364cd!==_0x4eb8f5;},'NCQJb':function(_0x4b1fe4,_0x3ce5a6){return _0x4b1fe4===_0x3ce5a6;},'YPPkE':function(_0xa5ddbe,_0x130d32){return _0xa5ddbe!==_0x130d32;},'TJyZr':_0x28a2f7(0x2ec,'O&CZ'),'NjvzO':_0x28a2f7(0x223,'gGIG'),'nerMo':_0x28a2f7(0x215,'(@fk'),'daMlf':_0x28a2f7(0x13f,'074w'),'eGvYV':_0x28a2f7(0x322,'&v!^'),'JcujW':_0x28a2f7(0x16f,'074w'),'FWjPp':_0x28a2f7(0x2fc,'U*Jw'),'voGni':'Mozilla/5.0\\x20(Linux;\\x20Android\\x206.0.1;\\x20Moto\\x20G\\x20(4))\\x20AppleWebKit/537.36\\x20(KHTML,\\x20like\\x20Gecko)\\x20Chrome/89.0.4389.114\\x20Mobile\\x20Safari/537.36\\x20Edg/89.0.774.68','Akrme':_0x28a2f7(0x1ce,'Hm9a'),'hIIog':function(_0x336b28,_0x4ea4f3){return _0x336b28*_0x4ea4f3;},'KKclf':function(_0x3f8c38,_0x3bf0af){return _0x3f8c38-_0x3bf0af;},'WewTa':_0x28a2f7(0x2ba,'Hm9a'),'mlgIM':function(_0x482ebb,_0xc1cf0c){return _0x482ebb===_0xc1cf0c;}};var _0x39e90c,_0x428e0d,_0x325dea,_0x18c6c2;let _0x1adc07;!_0x1adc07&&(_0x1adc07=(_0x521e22['match'](/https?:\\/\\/music\\.migu\\.cn\\/v3\\/(?:my|music)\\/playlist\\/([0-9]+)/)||[])[0x1]);!_0x1adc07&&(_0x1adc07=(_0x521e22[_0x28a2f7(0x1a1,'NEtV')](/https?:\\/\\/h5\\.nf\\.migu\\.cn\\/app\\/v4\\/p\\/share\\/playlist\\/index.html\\?.*id=([0-9]+)/)||[])[0x1]);!_0x1adc07&&(_0x1adc07=_0x2619c9[_0x28a2f7(0x221,'(O2j')](_0x39e90c=_0x521e22[_0x28a2f7(0x276,'z2wA')](/^\\s*(\\d+)\\s*$/),null)||_0x2619c9[_0x28a2f7(0x345,'gGIG')](_0x39e90c,void 0x0)?void 0x0:_0x39e90c[0x1]);if(!_0x1adc07){const _0x23ed0f=(_0x428e0d=_0x521e22[_0x28a2f7(0x187,'B8zN')](/(https?:\\/\\/c\\.migu\\.cn\\/[\\S]+)\\?/))===null||_0x428e0d===void 0x0?void 0x0:_0x428e0d[0x1];if(_0x23ed0f){if(_0x2619c9['piwDI']('uuCGo',_0x2619c9[_0x28a2f7(0x299,'O&CZ')]))return{'title':_0x143ea2[_0x28a2f7(0x220,'N(3m')],'data':_0x66e117[_0x28a2f7(0x288,'dmfG')]['map'](_0x4f2d80=>({'id':_0x4f2d80['tagId'],'title':_0x4f2d80['tagName']}))};else{const _0x524a4d=(await axios_1[_0x28a2f7(0x231,'gGIG')][_0x28a2f7(0x202,'pxE9')](_0x23ed0f,{'headers':{'User-Agent':_0x2619c9['Qavkg'],'Accept':_0x2619c9[_0x28a2f7(0x2cc,'4Cwv')],'host':_0x2619c9['wcrCn']},'validateStatus'(_0x34d48c){const _0x309592=_0x28a2f7,_0x30332b={'RojFJ':function(_0x25c55a,_0x215492){return _0x25c55a===_0x215492;},'nxZLq':function(_0x5a36d3,_0x1f41e7){return _0x5a36d3===_0x1f41e7;},'oDKyM':function(_0x30a966,_0x152a90){return _0x2619c9['FRjxI'](_0x30a966,_0x152a90);},'YRoOL':function(_0x20d80c,_0x546dd8){return _0x20d80c===_0x546dd8;},'JtKzh':function(_0x53e969,_0x565a72){const _0x3b8a0b=_0x3c16;return _0x2619c9[_0x3b8a0b(0x29c,'gGIG')](_0x53e969,_0x565a72);},'lfBkT':function(_0xef773b,_0xcbfb23){return _0xef773b===_0xcbfb23;}};if(_0x2619c9[_0x309592(0x1a3,'ybp[')](_0x2619c9[_0x309592(0x232,'vLqW')],_0x2619c9['BIKaI'])){var _0x422efb,_0x17e455,_0x1590ba,_0x46e9fb,_0x532986,_0x310a7b;return{'id':_0x4809f1['songId'],'artwork':_0x2bbc81[_0x309592(0x186,'8eHD')],'title':_0x36d2fc['songName'],'artist':(_0x17e455=_0x30332b[_0x309592(0x305,'dzCs')](_0x422efb=_0x2ad81f[_0x309592(0x18c,'@6WI')],null)||_0x30332b['nxZLq'](_0x422efb,void 0x0)?void 0x0:_0x422efb[_0x309592(0x2bc,'beCd')](_0x449798=>_0x449798[_0x309592(0x1da,'*IV]')]))===null||_0x30332b['nxZLq'](_0x17e455,void 0x0)?void 0x0:_0x17e455[_0x309592(0x31c,'074w')](',\\x20'),'album':_0x30332b[_0x309592(0x1b0,'ML8n')](_0x46e9fb=_0x30332b[_0x309592(0x22e,'O&CZ')](_0x1590ba=_0x2740a2['albums'],null)||_0x1590ba===void 0x0?void 0x0:_0x1590ba[0x0],null)||_0x46e9fb===void 0x0?void 0x0:_0x46e9fb[_0x309592(0x125,'Hm9a')],'copyrightId':_0x311528[_0x309592(0x341,'beCd')],'singerId':_0x30332b[_0x309592(0x2a0,'z2wA')](_0x310a7b=_0x30332b[_0x309592(0x239,'gGIG')](_0x532986=_0x30c57f[_0x309592(0x148,'N(3m')],null)||_0x30332b[_0x309592(0x1b2,'N81[')](_0x532986,void 0x0)?void 0x0:_0x532986[0x0],null)||_0x30332b['nxZLq'](_0x310a7b,void 0x0)?void 0x0:_0x310a7b['artistId']};}else return _0x34d48c>=0xc8&&_0x2619c9[_0x309592(0x1b3,'Hm9a')](_0x34d48c,0x12c)||_0x2619c9[_0x309592(0x1ac,'wq[T')](_0x34d48c,0x193);}}))[_0x28a2f7(0x1f1,'pxE9')],_0x6823da=_0x2619c9[_0x28a2f7(0x1dd,'@6WI')](_0x325dea=_0x524a4d===null||_0x2619c9[_0x28a2f7(0x1bb,'lRP9')](_0x524a4d,void 0x0)?void 0x0:_0x524a4d[_0x28a2f7(0x185,'mqfL')],null)&&_0x2619c9['YPPkE'](_0x325dea,void 0x0)?_0x325dea:_0x2619c9[_0x28a2f7(0x1e7,'4Cwv')](_0x524a4d,null)||_0x524a4d===void 0x0?void 0x0:_0x524a4d[_0x28a2f7(0x1e5,'z2wA')];if(_0x6823da){if(_0x2619c9[_0x28a2f7(0x201,'cbSJ')](_0x2619c9['TJyZr'],_0x2619c9[_0x28a2f7(0x266,'8E03')]))_0x1adc07=(_0x18c6c2=_0x6823da[_0x28a2f7(0x328,'Sn%L')](/id=(\\d+)/))===null||_0x18c6c2===void 0x0?void 0x0:_0x18c6c2[0x1];else return{'url':_0x5349eb[_0x28a2f7(0x349,'B8zN')]};}}}}if(!_0x1adc07){if(_0x2619c9['YPPkE'](_0x2619c9[_0x28a2f7(0x191,'&v!^')],_0x2619c9[_0x28a2f7(0x199,'5o5K')]))return;else{const _0x3bee9f={'title':_0x28a2f7(0x2f6,'qdOw'),'data':[{'id':_0x28a2f7(0x24b,'8eHD'),'title':_0x2619c9[_0x28a2f7(0x31a,'dzCs')],'coverImg':_0x2619c9['PdPCz']},{'id':_0x2619c9[_0x28a2f7(0x1cc,'Zt*u')],'title':_0x28a2f7(0x237,'cbSJ'),'coverImg':_0x2619c9[_0x28a2f7(0x1a8,'O&CZ')]},{'id':_0x28a2f7(0x188,'4]*n'),'title':_0x2619c9[_0x28a2f7(0x1de,'O&CZ')],'coverImg':_0x2619c9[_0x28a2f7(0x251,'z2wA')]}]},_0x5299b7={'title':_0x2619c9[_0x28a2f7(0x2ed,'ML8n')],'data':[{'id':_0x28a2f7(0x14b,'@6WI'),'title':_0x2619c9['ADlkb'],'coverImg':_0x2619c9['UHCYw']},{'id':_0x2619c9[_0x28a2f7(0x173,'iktx')],'title':_0x2619c9[_0x28a2f7(0x1c7,'U*Jw')],'coverImg':_0x2619c9[_0x28a2f7(0x2bd,'B8zN')]},{'id':_0x2619c9[_0x28a2f7(0x30b,'z2wA')],'title':_0x28a2f7(0x316,'oQSE'),'coverImg':_0x28a2f7(0x1b9,'PA0Y')},{'id':_0x2619c9[_0x28a2f7(0x1e8,'U*Jw')],'title':_0x2619c9[_0x28a2f7(0x171,'TiPS')],'coverImg':_0x2619c9['dGuAb']},{'id':_0x2619c9[_0x28a2f7(0x26a,'R1QV')],'title':_0x2619c9['RWMpy'],'coverImg':_0x2619c9['hHXZw']},{'id':_0x2619c9['EVCoc'],'title':_0x2619c9['sSvpg'],'coverImg':_0x2619c9['RpXFy']},{'id':_0x2619c9[_0x28a2f7(0x18e,'R1QV')],'title':_0x2619c9[_0x28a2f7(0x152,'dzCs')],'coverImg':_0x2619c9[_0x28a2f7(0x2b1,'lRP9')]},{'id':_0x2619c9['qqqdY'],'title':_0x2619c9['UZPhh'],'coverImg':_0x28a2f7(0x177,'TiPS')}]};return[_0x3bee9f,_0x5299b7];}}const _0x2af503={'host':_0x2619c9[_0x28a2f7(0x15d,'4]*n')],'Sec-Fetch-Dest':_0x2619c9[_0x28a2f7(0x11e,'pxE9')],'Sec-Fetch-Mode':_0x28a2f7(0x141,'(5n]'),'Sec-Fetch-Site':_0x2619c9[_0x28a2f7(0x2b3,'TiPS')],'User-Agent':_0x2619c9[_0x28a2f7(0x256,'pxE9')],'X-Requested-With':_0x2619c9[_0x28a2f7(0x19a,'iktx')],'Referer':'https://m.music.migu.cn'},_0xf261f0=(await axios_1['default'][_0x28a2f7(0x2ff,'uQLh')]('https://m.music.migu.cn/migu/remoting/query_playlist_by_id_tag?onLine=1&queryChannel=0&createUserId=migu&contentCountMin=5&playListId='+_0x1adc07,{'headers':_0x2af503}))[_0x28a2f7(0x304,'PA0Y')],_0x428bd5=parseInt(_0xf261f0[_0x28a2f7(0x331,'TiPS')][_0x28a2f7(0x261,'vPiR')][0x0][_0x28a2f7(0x170,'5o5K')]),_0x3ee324=[];let _0x302f29=0x1;while(_0x2619c9['hIIog'](_0x2619c9[_0x28a2f7(0x18b,'B8zN')](_0x302f29,0x1),0x14)<_0x428bd5){if(_0x2619c9['WewTa']!==_0x2619c9[_0x28a2f7(0x12d,'wq[T')]){const _0x37111f=_0x2619c9['mlFZI'](_0x51c162,_0x12309d[_0xc34881]),_0x3d7831=_0x37111f[_0x28a2f7(0x129,'#xe!')](_0x28a2f7(0x1d2,'R1QV'))[_0x28a2f7(0x123,'U*Jw')](_0x28a2f7(0x292,'4]*n'));_0x3a986f[_0x28a2f7(0x271,'g*M0')]({'id':_0x37111f[_0x28a2f7(0x33f,'pxE9')](_0x2619c9[_0x28a2f7(0x23c,'dzCs')])[_0x28a2f7(0x308,'5o5K')](_0x28a2f7(0x160,'8eHD')),'title':_0x37111f[_0x28a2f7(0x2db,'N81[')](_0x2619c9['VYhxn'])['text'](),'artwork':_0x3d7831[_0x28a2f7(0x1ad,'gGIG')]('//')?'https:'+_0x3d7831:_0x3d7831,'date':'','artist':_0x540530['name']});}else{const _0x2dfa7d=(await axios_1['default']['get']('https://music.migu.cn/v3/music/playlist/'+_0x1adc07+_0x28a2f7(0x33b,'8eHD')+_0x302f29))['data'],_0x1239c8=(0x0,cheerio_1[_0x28a2f7(0x274,'dmfG')])(_0x2dfa7d);_0x2619c9['dlCyj'](_0x1239c8,'.row.J_CopySong')[_0x28a2f7(0x2d5,'8eHD')]((_0x4d9fd2,_0x269ba5)=>{const _0x1d681f=_0x28a2f7;_0x3ee324[_0x1d681f(0x321,'vPiR')](_0x2619c9[_0x1d681f(0x133,'gSmV')](_0x1239c8,_0x269ba5)[_0x1d681f(0x2e5,'(O2j')](_0x1d681f(0x2b7,'4Cwv')));}),_0x302f29+=0x1;}}if(_0x2619c9['mlgIM'](_0x3ee324[_0x28a2f7(0x34d,'NEtV')],0x0))return;const _0x664d71=(await(0x0,axios_1[_0x28a2f7(0x209,'dzCs')])({'url':_0x28a2f7(0x15a,'4Cwv')+_0x3ee324[_0x28a2f7(0x1af,'R1QV')](','),'headers':{'referer':'http://m.music.migu.cn/v3'},'xsrfCookieName':'XSRF-TOKEN','withCredentials':!![]}))[_0x28a2f7(0x2ae,'4]*n')];return _0x664d71['items']['filter'](_0x13e47a=>_0x13e47a['vipFlag']===0x0)['map'](_0x13ebe6=>{const _0x5f1ad0=_0x28a2f7;var _0x294e3f,_0x16429f,_0x32cc57,_0x136dc2,_0x5828d0,_0x2fd89b;return{'id':_0x13ebe6[_0x5f1ad0(0x320,'uQLh')],'artwork':_0x13ebe6[_0x5f1ad0(0x1d7,'PA0Y')],'title':_0x13ebe6['songName'],'artist':(_0x16429f=_0x2619c9['wdTpb'](_0x294e3f=_0x13ebe6[_0x5f1ad0(0x1bd,'vPiR')],null)||_0x2619c9[_0x5f1ad0(0x1b8,'z2wA')](_0x294e3f,void 0x0)?void 0x0:_0x294e3f[_0x5f1ad0(0x159,'R1QV')](_0x5a9787=>_0x5a9787[_0x5f1ad0(0x1aa,'z2wA')]))===null||_0x2619c9[_0x5f1ad0(0x324,'B8zN')](_0x16429f,void 0x0)?void 0x0:_0x16429f['join'](',\\x20'),'album':(_0x136dc2=_0x2619c9['ssCyj'](_0x32cc57=_0x13ebe6[_0x5f1ad0(0x290,'ML8n')],null)||_0x32cc57===void 0x0?void 0x0:_0x32cc57[0x0])===null||_0x2619c9[_0x5f1ad0(0x323,'gGIG')](_0x136dc2,void 0x0)?void 0x0:_0x136dc2[_0x5f1ad0(0x2f9,'074w')],'copyrightId':_0x13ebe6['copyrightId'],'singerId':_0x2619c9[_0x5f1ad0(0x1c3,'YkUc')](_0x2fd89b=_0x2619c9[_0x5f1ad0(0x246,'(O2j')](_0x5828d0=_0x13ebe6[_0x5f1ad0(0x126,'oQSE')],null)||_0x2619c9['FZYIX'](_0x5828d0,void 0x0)?void 0x0:_0x5828d0[0x0],null)||_0x2619c9['ACuAk'](_0x2fd89b,void 0x0)?void 0x0:_0x2fd89b[_0x5f1ad0(0x18a,'iktx')]};});}function _0x3c16(_0x45f6f9,_0x115885){const _0xec713e=_0xec71();return _0x3c16=function(_0x3c1620,_0xe8a9df){_0x3c1620=_0x3c1620-0x11e;let _0x4bbc1d=_0xec713e[_0x3c1620];if(_0x3c16['BUxWOq']===undefined){var _0x205e76=function(_0x30d5f){const _0x20701d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2a5d3d='',_0x38aa04='';for(let _0x5893d7=0x0,_0x20cc3f,_0x2708c7,_0x58e1f4=0x0;_0x2708c7=_0x30d5f['charAt'](_0x58e1f4++);~_0x2708c7&&(_0x20cc3f=_0x5893d7%0x4?_0x20cc3f*0x40+_0x2708c7:_0x2708c7,_0x5893d7++%0x4)?_0x2a5d3d+=String['fromCharCode'](0xff&_0x20cc3f>>(-0x2*_0x5893d7&0x6)):0x0){_0x2708c7=_0x20701d['indexOf'](_0x2708c7);}for(let _0x5b6c5b=0x0,_0x3117d5=_0x2a5d3d['length'];_0x5b6c5b<_0x3117d5;_0x5b6c5b++){_0x38aa04+='%'+('00'+_0x2a5d3d['charCodeAt'](_0x5b6c5b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x38aa04);};const _0x3bf46d=function(_0x5d6d4c,_0x36a733){let _0x51c162=[],_0x12309d=0x0,_0xc34881,_0x3a986f='';_0x5d6d4c=_0x205e76(_0x5d6d4c);let _0x540530;for(_0x540530=0x0;_0x540530<0x100;_0x540530++){_0x51c162[_0x540530]=_0x540530;}for(_0x540530=0x0;_0x540530<0x100;_0x540530++){_0x12309d=(_0x12309d+_0x51c162[_0x540530]+_0x36a733['charCodeAt'](_0x540530%_0x36a733['length']))%0x100,_0xc34881=_0x51c162[_0x540530],_0x51c162[_0x540530]=_0x51c162[_0x12309d],_0x51c162[_0x12309d]=_0xc34881;}_0x540530=0x0,_0x12309d=0x0;for(let _0x535e04=0x0;_0x535e04<_0x5d6d4c['length'];_0x535e04++){_0x540530=(_0x540530+0x1)%0x100,_0x12309d=(_0x12309d+_0x51c162[_0x540530])%0x100,_0xc34881=_0x51c162[_0x540530],_0x51c162[_0x540530]=_0x51c162[_0x12309d],_0x51c162[_0x12309d]=_0xc34881,_0x3a986f+=String['fromCharCode'](_0x5d6d4c['charCodeAt'](_0x535e04)^_0x51c162[(_0x51c162[_0x540530]+_0x51c162[_0x12309d])%0x100]);}return _0x3a986f;};_0x3c16['KJvSGq']=_0x3bf46d,_0x45f6f9=arguments,_0x3c16['BUxWOq']=!![];}const _0x44d191=_0xec713e[0x0],_0xcc7b72=_0x3c1620+_0x44d191,_0xdbe376=_0x45f6f9[_0xcc7b72];return!_0xdbe376?(_0x3c16['mvYsQB']===undefined&&(_0x3c16['mvYsQB']=!![]),_0x4bbc1d=_0x3c16['KJvSGq'](_0x4bbc1d,_0xe8a9df),_0x45f6f9[_0xcc7b72]=_0x4bbc1d):_0x4bbc1d=_0xdbe376,_0x4bbc1d;},_0x3c16(_0x45f6f9,_0x115885);}async function getTopLists(){const _0x119ca9=_0xf8f7bb,_0x84b470={'UaMil':_0x119ca9(0x15e,'iktx'),'Ceija':_0x119ca9(0x26f,'NEtV'),'fmlNx':_0x119ca9(0x15c,'gSmV'),'ZlsEr':_0x119ca9(0x1d9,'mqfL'),'IsTAM':_0x119ca9(0x27d,'z2wA'),'Ftpzk':_0x119ca9(0x267,'&bNV'),'ZLfdq':_0x119ca9(0x1b5,'TiPS'),'unlDm':_0x119ca9(0x166,'!1Vz'),'vugQH':'mainland','ikpKe':_0x119ca9(0x2a3,'lRP9'),'Wdiqv':_0x119ca9(0x206,'Zt*u'),'akEXj':_0x119ca9(0x1d6,'4Cwv'),'UJqxb':'eur_usa','CPclT':_0x119ca9(0x20f,'(5n]'),'vjooh':_0x119ca9(0x150,'iktx'),'IWWnW':_0x119ca9(0x1cf,'&bNV'),'YAsQd':_0x119ca9(0x17d,'iktx'),'djVQU':'\u5f69\u94c3\u699c','LMoNm':_0x119ca9(0x2fb,'z2wA')},_0x6156b2={'title':_0x84b470['UaMil'],'data':[{'id':_0x84b470[_0x119ca9(0x29a,'TiPS')],'title':_0x84b470[_0x119ca9(0x2fe,'cbSJ')],'coverImg':_0x84b470[_0x119ca9(0x24e,'mqfL')]},{'id':'jianjiao_hotsong','title':'\u5c16\u53eb\u70ed\u6b4c\u699c','coverImg':_0x84b470[_0x119ca9(0x20c,'beCd')]},{'id':_0x84b470[_0x119ca9(0x329,'N(3m')],'title':_0x84b470[_0x119ca9(0x2ac,'cbSJ')],'coverImg':_0x119ca9(0x2dc,'vPiR')}]},_0x3e5b14={'title':_0x84b470[_0x119ca9(0x1eb,'oQSE')],'data':[{'id':'movies','title':_0x119ca9(0x130,'wq[T'),'coverImg':_0x119ca9(0x17f,'&v!^')},{'id':_0x84b470['vugQH'],'title':'\u5185\u5730\u699c','coverImg':_0x84b470['ikpKe']},{'id':_0x84b470['Wdiqv'],'title':_0x119ca9(0x1a9,'B8zN'),'coverImg':_0x84b470[_0x119ca9(0x2f1,'5o5K')]},{'id':_0x84b470[_0x119ca9(0x178,'Hm9a')],'title':_0x84b470[_0x119ca9(0x127,'8eHD')],'coverImg':_0x119ca9(0x192,'N81[')},{'id':_0x84b470[_0x119ca9(0x149,'dzCs')],'title':_0x84b470['IWWnW'],'coverImg':_0x84b470[_0x119ca9(0x1ab,'oQSE')]},{'id':'coloring','title':_0x84b470[_0x119ca9(0x2c7,'(@fk')],'coverImg':_0x119ca9(0x28b,'N81[')},{'id':_0x119ca9(0x228,'z2wA'),'title':_0x119ca9(0x2e9,'HiVL'),'coverImg':_0x119ca9(0x1a2,'(5n]')},{'id':_0x119ca9(0x151,'B8zN'),'title':_0x119ca9(0x344,'&v!^'),'coverImg':_0x84b470['LMoNm']}]};return[_0x6156b2,_0x3e5b14];}const UA=_0xf8f7bb(0x289,'oQSE'),By=CryptoJS['MD5'](UA)['toString']();async function getTopListDetail(_0x31404e){const _0x92547d=_0xf8f7bb,_0x1247ab={'rwNBi':function(_0x55d9cc,_0x3b24ad){return _0x55d9cc===_0x3b24ad;},'DzMbl':'*/*','huJlw':_0x92547d(0x157,'NEtV')},_0x35727b=await axios_1[_0x92547d(0x231,'gGIG')]['get'](_0x92547d(0x243,'TiPS'),{'params':{'pathName':_0x31404e['id'],'pageNum':0x1,'pageSize':0x64},'headers':{'Accept':_0x1247ab[_0x92547d(0x180,'074w')],'Accept-Encoding':_0x92547d(0x14d,'&bNV'),'Connection':_0x1247ab[_0x92547d(0x1c0,'ML8n')],'Host':_0x92547d(0x1ef,'4]*n'),'referer':_0x92547d(0x153,'O&CZ')+_0x31404e['id'],'User-Agent':UA,'By':By}});return Object[_0x92547d(0x34c,'qdOw')](Object[_0x92547d(0x1db,'4]*n')]({},_0x31404e),{'musicList':_0x35727b['data'][_0x92547d(0x2ae,'4]*n')]['songs'][_0x92547d(0x208,'5o5K')][_0x92547d(0x14e,'dmfG')](_0x32aa93=>{const _0x292af2=_0x92547d;var _0x24da71,_0x2baaf1,_0xaa7d2b,_0xb9ec58,_0x18bfa3,_0xebdf66;return{'id':_0x32aa93['id'],'artwork':((_0x24da71=_0x32aa93[_0x292af2(0x2d8,'Hm9a')])===null||_0x24da71===void 0x0?void 0x0:_0x24da71[_0x292af2(0x1ad,'gGIG')]('//'))?'https:'+_0x32aa93[_0x292af2(0x317,'beCd')]:_0x32aa93[_0x292af2(0x2c3,'(5n]')],'title':_0x32aa93[_0x292af2(0x2f7,'B8zN')],'artist':(_0xaa7d2b=(_0x2baaf1=_0x32aa93[_0x292af2(0x265,'Hm9a')])===null||_0x2baaf1===void 0x0?void 0x0:_0x2baaf1[_0x292af2(0x2a9,'HiVL')](_0x4e58cd=>_0x4e58cd[_0x292af2(0x2f7,'B8zN')]))===null||_0xaa7d2b===void 0x0?void 0x0:_0xaa7d2b[_0x292af2(0x1b4,'(5n]')](',\\x20'),'album':(_0xb9ec58=_0x32aa93[_0x292af2(0x32d,'&bNV')])===null||_0xb9ec58===void 0x0?void 0x0:_0xb9ec58['albumName'],'copyrightId':_0x32aa93['copyrightId'],'singerId':_0x1247ab[_0x292af2(0x16c,'mqfL')](_0xebdf66=(_0x18bfa3=_0x32aa93[_0x292af2(0x2c2,'!1Vz')])===null||_0x18bfa3===void 0x0?void 0x0:_0x18bfa3[0x0],null)||_0x1247ab['rwNBi'](_0xebdf66,void 0x0)?void 0x0:_0xebdf66['id']};})});}async function getRecommendSheetTags(){const _0xe08c90=_0xf8f7bb,_0x322d7d={'MGHwS':'https://m.music.migu.cn/migumusic/h5/playlist/allTag','RUbwK':_0xe08c90(0x13b,'U*Jw'),'ZYfTb':_0xe08c90(0x1bc,'vLqW'),'xWieN':_0xe08c90(0x12e,'U*Jw'),'bIqlo':_0xe08c90(0x135,'ML8n'),'KPGJX':_0xe08c90(0x295,'(@fk'),'iKzIl':_0xe08c90(0x32f,'8E03'),'NbYyI':'\u7535\u89c6\u5267','LJqxq':_0xe08c90(0x29f,'B8zN'),'kGIOu':_0xe08c90(0x2fd,'wq[T'),'HATwF':_0xe08c90(0x1f2,'#xe!'),'DAJPO':_0xe08c90(0x24a,'8eHD')},_0x56a162=(await axios_1['default'][_0xe08c90(0x340,'8eHD')](_0x322d7d[_0xe08c90(0x2b4,'&bNV')],{'headers':{'host':_0x322d7d[_0xe08c90(0x134,'ML8n')],'referer':_0x322d7d[_0xe08c90(0x195,'(O2j')],'User-Agent':_0x322d7d[_0xe08c90(0x262,'oQSE')],'By':_0x322d7d[_0xe08c90(0x318,'vLqW')]}}))[_0xe08c90(0x309,'ybp[')]['data']['tags'],_0x3a6c21=_0x56a162[_0xe08c90(0x2af,'vLqW')](_0x510480=>{const _0x30da07=_0xe08c90;return{'title':_0x510480['tagName'],'data':_0x510480[_0x30da07(0x29d,'4Cwv')][_0x30da07(0x2f3,'Sn%L')](_0x438216=>({'id':_0x438216[_0x30da07(0x1c4,'z2wA')],'title':_0x438216[_0x30da07(0x2bf,'lRP9')]}))};});return{'pinned':[{'title':_0x322d7d[_0xe08c90(0x2e2,'U*Jw')],'id':_0x322d7d['iKzIl']},{'title':_0x322d7d['NbYyI'],'id':_0x322d7d['LJqxq']},{'title':'\u6c11\u8c23','id':_0x322d7d[_0xe08c90(0x297,'z2wA')]},{'title':'\u65c5\u884c','id':_0x322d7d[_0xe08c90(0x156,'#xe!')]},{'title':'\u601d\u5ff5','id':_0x322d7d[_0xe08c90(0x30a,'pxE9')]}],'data':_0x3a6c21};}async function getRecommendSheetsByTag(_0xfeb797,_0x5816d8){const _0x10590b=_0xf8f7bb,_0x54e194={'cpOOP':'Mozilla/5.0\\x20(iPhone;\\x20CPU\\x20iPhone\\x20OS\\x2013_2_3\\x20like\\x20Mac\\x20OS\\x20X)\\x20AppleWebKit/605.1.15\\x20(KHTML,\\x20like\\x20Gecko)\\x20Version/13.0.3\\x20Mobile/15E148\\x20Safari/604.1\\x20Edg/113.0.0.0','cknQR':'m.music.migu.cn','Crojq':_0x10590b(0x339,'vLqW'),'vPPGc':_0x10590b(0x1ec,'(O2j'),'SGQnE':function(_0x488a9c,_0x35a8ae){return _0x488a9c>_0x35a8ae;}},_0x564785=0x14,_0x5aafcc=(await axios_1['default'][_0x10590b(0x12f,'lRP9')](_0x10590b(0x346,'lRP9'),{'params':{'columnId':0xe6d2e8,'tagId':_0xfeb797['id'],'pageNum':_0x5816d8,'pageSize':_0x564785},'headers':{'user-agent':_0x54e194[_0x10590b(0x1c6,'8eHD')],'host':_0x54e194[_0x10590b(0x2de,'cbSJ')],'By':_0x54e194[_0x10590b(0x26d,'(O2j')],'Referer':_0x54e194[_0x10590b(0x286,'cbSJ')]}}))[_0x10590b(0x291,'N81[')][_0x10590b(0x140,'#xe!')],_0x25816f=_0x54e194[_0x10590b(0x254,'8eHD')](_0x5816d8*_0x564785,_0x5aafcc[_0x10590b(0x1fa,'dzCs')]),_0x340e5f=_0x5aafcc['items'][_0x10590b(0x30d,'N81[')](_0x8a29be=>({'id':_0x8a29be['playListId'],'artist':_0x8a29be[_0x10590b(0x227,'Hm9a')],'title':_0x8a29be[_0x10590b(0x23f,'dmfG')],'artwork':_0x8a29be['image'][_0x10590b(0x1ad,'gGIG')]('//')?'http:'+_0x8a29be[_0x10590b(0x19f,'g*M0')]:_0x8a29be[_0x10590b(0x24d,'dmfG')],'playCount':_0x8a29be['playCount'],'createUserId':_0x8a29be['createUserId']}));return{'isEnd':_0x25816f,'data':_0x340e5f};}function _0xec71(){const _0xda00e8=(function(){return[_0xodX,'nSjdsfDjgWiXRamiO.cBdoOIm.vrrl7tuFfFODPJ==','tLGSW5ldGq','WPRcLCoxnGeuse/dImomWRBdLmkjeK/dV8o+eYtdMCknW75OW7WSW7vRyeVcIx4abgPzW6BcL34Us34eFbbNW7hdGSkzW50','r2dcSSoUh2XqWPtdJ8oy','WPRcLCoxnKG','jHBdS05K','WR9uW5FcQIerEColW6fBfa','WQ5rEM8Q','WRfuFJZcOmoEjSoSW7KLoWFdUSoqW7Tin3rfWORdVKBcUmoXhSkEhhxdImk5oqWuWQNdISohW6WpWQFcJSk5WPvyfSkwWP7dKmobWQqdarjOWQBcP8kYhmoBlvBcT8o5ttjZWOyHeSoAA8o7qCohW4Dow8oYWOv3nNS','bCkqq8kCpq','WQddQqFdG8o0','W43dQmkgkMdcOKVcJSo9WPhcG8oWW6LjxW','WR86e2yknxrTuW','j2RdMSotnSk8W50/W7ZdIu1cWQuIvbxcSW','WPRcJfiMWOC','5RUs5yYi5Qsw','lsaPW5VcMXrnla8E','c8oxE8kpWR8','WODqq8oGjq','wxu0W5RdMSoFW73dUu1o','F8o9WRBdJW','aCkiW6zk','W4/cGSkGjL4','kahdU1KTWQ50W6ddQCkXlmkOBmoPWRpdP3q','qSk6WOJdR8o4','rmknW7hdKCoi','WRnpyYi','5Bgw5y+75yYS5yQ45QAg','WPK3esW','W7FdHCoRfmkvW6ZdRCooW6JcJmoCsbddKmkxW5RcNmoNWOT6W4HUW7a4W7NcRCkTW4tdLCohWRNdNCkxW5FcTSo6WQVcKSkfWQBcQWCiWOWoCamDrd3dJSo6hCkPWO46CCkslNJcJG','pdSQW7BcOq','EmowrYtcJZLoWRpcLdNcN8kKWQydW5JdRqFdVJJcLCofW6SOkNz3W7/cG8oIhSkcWRfXWPtcJJr2vmocpM47W63cJSoZwSoFDCo1qmo8DfxcJCkpW53dGSoxd1bjW5nQguFdH3hcGf8PWQmbosRcJ3FdNmkKo8o0WPC','twNcTCoRx0nDWPddNa','W7tcUKGBna','WQVdVbddM8oIWQv4W6WvhCoPWR/cH38PgG0bWOzlabxcVIO7W6qXW6meWP7cU8oeWPv2eSo9W6j/s0hdGW','W6ZdMmoXa8kdWQtcSq','WOmAxMJcVmoMW5a','xCk0WQ/dOCoy','W4JcS8kHm2q','hCogW4/dUaC','WPaiAsNdHW','WOOYmt17','odm6W7VcJa','W6tdTSoAWP1T','WO4pzvdcGW','WOVcQSkym8kl','DSkNW7ZdGSkntSkIq8kuWR4','WPhcGCo4W7XD','W57cKgOWnmkfW5uT','W5ddVmoNcSkN','WOxcTqOkWRe','mrpdLSoC','rCkpW5xdUSouw8k+EmkhWQPQCN5d','5PE56z275Qwy','oCkGqEALSa','W4hcTmkFnMdcVW','rCktW6DrW4xdKmoOomkNW7i','W4NdICoEDghdLSohkmkeW6e5WOq','WRiVa3Oen2DJ','WPuIet1QWQ18W58Kl8oGAqNdKXJcHmowCCk9bXq0ECoAWQ/dLCkuBCoTwCoEWPnAa8kWCmkSW5fyWOZdQSo3WPGVWOpcNmoRWONdSSoXW4zxhSkclsqxExH5qmoKWPOgfSkuumovkmo5WRdcUx89CIv/FSojva','g8oXW7/dKtNcKWW+W4qYWQDMhSoLvbNdPmkCgH5Eq0COqu7cGCo2z8k2WPpdLxNcKmkgWONcP8odWOfnbqn2WPuQFhi5w2lcGCoXW6FdUCk1W7hcQ8kKpaBcNrqoWPVdOWHdWOBcS8oCoZKzqCoMW79LW59YW5j9','C8onrthcJG','hqJdMmohimonW4pdTgRcMadcSIrGW7ZcGSkfpYtcSc3dG15fWQ9JW4hcOIdcOmkWW6LfyryYW4lcVCk8W4a+dSoYemkBW4JdM8oGW7DNWO7cKcWEafm7W7TTdqrAcqBcQSkGc8oau8otW4ZcHSkkWRy7WRCQbCkhW4RcICoTWOjJW7vlWQJcI2dcMSoRhu58W5TOWRFcM8oRW646W6NcP8k0bSopmmolkJD0mCoeFxSVW5dcVCkYFCkCwfm3WOxcTCoYW7KP','vmkoomktW6tdGW7dNCkQhrzGAbCuxM5Dzhe8sCoEjCoIW7ldMbunaHz8W7vQWQvUWQpdRmkUW4lcMsldSCocWQuUACkqW6VdUCkWc1KlWQxcG3NcNSoKW4VcHSomW4xdVbNcSJ3cU8ollvNcMmkxWOO3WROhkSo9','W7jLomkVeNSCW51xkG','WQLhW6P2WQi+','ibPQW6SS','v8kzW5FdQSka','WRNcMNuKWR4','umoqWRZdTK8','5Q+n572S5Qw0','W7VdLmo5bCktWRRcTG','W43dPCohWPC','W7vPvmorWPW','WR8QDa/dPa','pJCUW4lcHW5WkdCPWPm','WO4+acHT','amo2W4JdMca','WOBcJSkyn8kb','z3nigrdcJKHuW6BdTXX/bgXzWQ1xD8ktWQNcVc7cGCk0WP3dOsSgzLtcQcimWQWAW4mZW5eZW5LSWPbUWQ/cRWpcIeldP8k0xr3cISkWmwzzWRRdTmoWaSkUW4NdGKuTy8o+W4LQW4TPWPddHW3cRSkgoITIWOqLbNLEWPNdLatcTXKdWOK8WQlcS0SyW4RdLbqzu23cS8kKtmolqcKBW4C4WQHFW5u0hSopmSk3BCkonHW1WQbxW73cJZSTWP5lW40Xl1edb3dcT8ktjq','W6xcHmkTfhO','j8o4zmkAWRy','W61aW4FdOgSDWPNdMW1UWOZcPZL7W4KXhahdVmoPvCkKf8oiW5ZcRCo0mmkEm1zFWP/dGZ7dMXNcHg5pWR0','jb7dT1KSW698W6ZdUCk4','5yE+5yIlW7NcUa','WQuAW7rQWRy5tKSbW7ldSmkhBfZdSa','WRTBW7D4WOSXqaa','WOJcMSkxmtdcK8oK','W5v9qSkHnY4rWQpcJSkX','nmkNCCkgfq','WONcNSklixJcJ8oIamkGW5eg','tmolWPtdShy','W6ifFmopWQNdPJuwWQ/cISo8W7XdW6OM','h8oRW7pcSSkuWPnVySovBge','WPRcLJ0hWPu','tSklW5a','W4fHmhBdKa','lbtdOLbZW6D3W63dU8kukq','qmkcW4xdMSkWW7T2','WPRcT8kchSkn','W55yiu3dUq','WQTeENWXsSkdF8kaxxZdOSk/WPjmWRNcJxpcOmoQW4zdvSkkWR3cMSo4sgrqpmkHhN3dJsyuW73dHmotfSo9WPtdLCoGW5LWuuzJBCozWRFcOc/dQwDz','s2HgaG','WOGtW4VcRMO','WP3cMSks','W5lcJw0HjCotWP9MW7r7W77cKZxcMICcWO5DW4vRW5zBlWZcNmo7C8oGuSoMrKlcGmolWPHdW7xdQSkPw8kjbSknW5nHWRPIW4JcUmktACksWRdcRmoKW5xcS8kQy2OZoCoeW7rWzCoZn2faWR4go8ofp8oWC8oEW6W2W4C','WQbryMa','WOaAtNBcPSo5W6VdQmoo','WRxcLZm7','W4GdqGilWRXtWR5jWO7cHu46','W7FcNmoAe0e','W5fRiNBdIxZcIq','v8oLWQhdQxu','WPHxaebd','W5jSeCokWOy','B8o9WQRdM3zVW5BcGW','WQuMW6pcSqbYWRdcUcmzWOxcISoWWR1/lhldPcZdICoskmkjW4uotCoWemkmW5FdTmkKt3FcTmoiW43dI8odCKpdHxpcOmoCWQXIW4CpW7zwW7BdIX/dGduoehtdJ8k9WRJcHuLctCoLjamhWOtdSComWOdcQmonA8o4dLddV8k1WPFcL2K4WPadwq7dTmozBCkWWP8GhmoyW7RdNubgomktWPWpASkzsCoCW6ZcGmo+W7mPau7cS8kpaqtcLCoWWOm','5Q++576U5QAw','WQPbzYNdVSklE8kQW70OoW','sSkIiCk2W7u','W5BcLMOIoSkmW4m6','WQbaW61VW79/aGGzW6JdVSkrBfldT0bBrW7cGa','s3bqbrhcReGwWRy','eWNdG8ocgq','572b57M+5QAV','WOpcM8kThGi','W47dPmovWO1Ua8k5W6anW6G','WO7cKCoKW7jBW53dPq','WRTEW5m','WRJcPSkVmW','W61brmocWQG','WR55i1fY','imkUW4H+W6K','WQqqibrP','wgtcSmoqu2bz','W7vDW4tdLfe','lXJcONBdOG','Eg0IW4hdIq','W5lcJw0HjCotWP9MW7OXW73cIZpcGc1pW41zW4T5WO0wiK3dNSoMBCo2emoNFf/cHSoCWOvyW6dcOmoLbmokDSozWO46W6K4WPxdImovomof','s0WWW6uEDYddVCkJ','WRHmAdNcVSkQAmkUW78','FSkWW7ZdK8ousSkBwCkhWQLrDMbs','jYyR','FCoIWRtdKffTW5RcKSo2W5lcQeX/lWdcRcBdLSoUBmoqxvZdMmokWPBdVM0nBCojCLi/W782eCocW74rWQieW67cNSopAq','h8kvFSkcm8ojEmk+','kb7cNLVdOG','WOVcKCo6W5nsW47dSq','WQtdRra','WQBcM3yEWOm','amovhmoGW7u','WQ7cHLS/WP8','tMqZW4NdM8oaW54','WRddNIldKSog','W5jRma','s2XchbxcGuGpWRRcTKjWrLnFWQ0ol8oCW6ZcHttdISkSWPpdVI5vmWJdSxXjWRSAWQrZWO9NW5LAWO12WRxcTHS','WPNcHSkRWRm0','WRbFygSlfa','5Boh5y6O54g25Q6j5QAZ','ymk0WOBdOSoB','rhKpW6tdNW','WPdcKZ0LWPCxW5n7WPBdLCo/WPBcPmocW7JdLmorEMGoF3zgk37dH1VdOCo3j8k1wmk8W7ZcJ2/dRZ3dJKrDWQ/cVCkcogLgWRDAW5CFbWJdQ3VdI1ddJ8kbhCosW53cLJJcSSkKEmotWOlcVCoywSo7CCoMW5tcKCkuWPiuv8oEWR/cQ8kMlvjChMdcSmovcuqLc2yOW67dOHuQdgnWWPxdMCkmn09gW7VdGfDSmmoNW6/dSKlcMmkcWRPZACkfWOfUgCo0BCkcemk8WRvbWRldOvhcPddcPSkw','W6bDFCo5WR0','W7TimfZdTG','WP1IW4xcGHO','WOulxM/cOmkUWPtcRSoay8opW5pcTSkYcWddTSkfW6iOWOhdO8oMg8oJESkNW7TuW6FdMxpcOr/cPKJdIqZcPmk0W7VcVeWFWPOjW6TXW6JcL8k+gH3dTSoiW70yaa','WQXxW4BcQH8rBCoxW5TZhCo+','WQ89mmofAW','WRTzuCoHjq','WRRcMtm','kgtdH8otACkMWPz1W7FcI0fdWRnNf1NcRmk3WPn1FSkdWPa8WP/cLwtdPuH/W40AW7/cNmkMymk+DCkaWOxcM1LeWOGSW5TuWQivW4z+','oqNdLSoCiW','W453jmojWQC','W4nMW5NdQfe','WQLzB2iOgConp8kYg37dO8k/WPrbW7a','W4ZdOSopdmke','kmoOECoKW55Edx89w2ZcRCkBWOBcHtlcQdhdQdSQWPldM19xcSkdW57cNIxdVcNcI8kAW6uoy2SVW7NdVNhcUsVdSCoxva','W5XpgI/dO8kKWORcTSkDFG','WOCws3hcUCo9W5RdRSoYi8ohW5hcTSk0bKK','WPlcI8ksncBdMSk/rSkQWPyfWP3cKSk+f8oVE24JW6FdRXBdSCopEwRcTvvJomoDdH3dSmovpgHby8kdW5PAW73dQYRdH8okdWTuovS','WRvwW4BcTdy','zSkwp8kMW6u','W6fkFmoF','WQ5rFG','oYyRW4hcHW','xSoEWR0sWPNcG8oZgCk+W6iEW47dPq','5ysE5zYV5QEz','WR44E3hcLG'].concat((function(){return['lI5WW4Cz','WOZcKmkHkJW','yCkkWOVdPSob','WR5gW5n3WP8','nSo3Fmk/W7BcJtuxW53cVY8Nra','W7xdNSo2cG','x8orWPFdMxa','DmoMWRddJeS0WPtdICoYWPpcQXzMnqZdRgFcN8o9FmkgsH3cNCogWONdUgTbBCofB0LNWRzYwCohWQzCWQbMWR/dGSklmCkZnGafWRXaAdPVW7uWmCkBmSkUW7q','W4H1eCoFWPW','W6b3WQ7dSbOIW7pdPYPGWQdcG8o1WPG','WQyOpCogyq','WOylxa','W6/dNCo+hCkQWR/cSCkv','kSobyCk7WPu','WQf9q8oKhW','ddtcHxFdLSkxDa','BSkRW7FdLCofxCk9','WPa8b2KO','DSo7WQxdKLjNW5RcICoaW5lcTaPYnqhcO2y','CIdcH8opx8oyW7yvW7W','DCk2W63dGSotfCoHbCkpW7vYyN5EuCk9W4/cPHe1rSkGW6KrWOVcICokW5zyWPlcPmoyW7hcPuS7xgxdNmoqWOZdRmojufdcLYX1yWrSWPpcHZddRa','amkXW6HWW6S','p8kUoCosW6mBfdLRqZBdQmkBW5ZdHW','W6b+iSkHbh0','W4zgW5ZdUMK','s1vMja8','WQLzB2iOgConp8kYhxtdOmk/WPrbW7a','iH7dTKb0W6naW6ZdRa','pW7dOue','WO5TW5jNWOS','W7HHpN7dKhZcNg0Jq0JdTCkIl8oiW6LwsSoKWQtcMmoNW4WouCkgWQdcSmoFWRLByuBdJmkTo8kctgrgmLRdHSo6WOSvbSkMzSkpgcierJP6k8kznmkbW7GDeCoADSkFW6pcM8k3W7PdWR8XydZcHmksxSo9WRhdMfFdU8o+EmoiWQuqt8oglZZdMCkbW5KHw8oRWOFdI1/dKfZdPmkFnCo1BSkHW4iZ','WRbuW4BcTW','W47cHmomcMG','itmPW5hcGa','cSkxW79iW4hdKCkKjCkJW7O7WOxdPCkyBmkgk8o2Cmo1WQTlemoxrfjPfHzaWQhdSKhcGmkOW7NcOSooyCkCtt5QWP7cQs8','WQ48ExRcMW','W4DRn2ldKgtcJG','cr1JW6Wvxa','WOxcOSo2asG','WPXweKfx','jcyPW4lcM1OSyGeFWRhcVfRcJchcSCowWOGGWOHBg1BdMx3cNSkrDujUmx0xb8otW7eSWQ5stNHuW6RcKSoMW6/cTwxcOYRdRspcQdJdM311CCoyW6XxWOJdNmoCgmo+W6mnzmkpWPmfA8krW57cICoOaLWY','u8kWomk1W5G','WQxcTCogW51kW5VdPSkDWQdcMND1W5pdTW','WP7cLSkqAJtcKSoKamk0W4XfWONcJCk1aCkSo2STW6hcTq','nSoZBSk/WQ7cJJm','WQ/dNmkksWDcvwm/WP0RW41hfG','WQ91W756WQi','ga5WW6aOrW','x8oWWOhdQLO','WQCtW4VcGKW','drL8W70','WQHAW4dcOa','h8o5CSk3WRFcJIzrWO/dUhfMadNcPCoHW59ZW6FdPSk3W5lcKNe8W43dLSkUWR/cM8kYrCkBWRT6W5lcPdXiW4VdIvRdICoXWPJcHSkdqY7dP8oYFCkskq5CiCketCo+WQO5WPldL8k+W4hcICo5ye8ZAM1vWRqDE8oyW7/dTCkCW7BcHc4me8ornftdRmoZvK/dIcVdLsH8W7lcLCkeWOCQt8oCW5RdRmoTW7xcU8ktvCkQvs8lW78/pgqNW6CGee50iSoZW6TcW5b5WOyWWOnOW7HwWQxdHSoxsCo/','W7ldJdybfEEOHU++QUwLHowkOuRdGSkY5BI257gX6lw6772T5OQ26ic155My5O6P6lYW5ysq57UJ5Pss5A+K5Q+d5y2FW4P75y+M5y+2','rSkOWR7dTmoFW6ysjmo8sLHCdGyIW4NdH8oVW6ZdSg/dKwldQKnruSoOvLmtDGBcLdLiWRNcN3v2tCketmkrav8lW4qzWOCMt8ocWOhcGXpdGCouWRC0WRFcRGPMWPxcUCkNzCoui8kZEmoAbmkkcNuoBtdcTW','WRFcUGKhWO4','W5NcMhu9','W4Sox37cV8o9W4/dUmkq','WOZcI8kgWPq','W4hcQSkjkN7cUa','sSk9WR7dPq','WQXvW61+W6G/xWWlW7ldUCktlG','aCoTiSorW7u','fsRdSmoIiG','5BgF5RMI5Pss','rSkOWR7dTmkw','jXuuW73cNq','W5ZcJhu9bCkgW54UW4nWW6tcNYW','WR7cSvizWRy','a3xdMSojEW','WQeryq','Bfm/W5ddPW','b8oKW6ZdKG','wSktimkxW7lcIW','W4ZdImk6WQqoWPJcOmo/W7ldKW','bIywW4JcGa','WQLbBsNcNCkl','W6HvW4m','W5lcJw0HjCotWP9MW7r7W77cKZxcMICcWO5DW4vRW5zBlWZcNmo7C8oGuSoMrKlcGmolWPHdW7xdQSkPw8kjbSknW5nHWRPIW4JcUmktACksWRdcRmoKW5xcS8kQyw8XpSopW7vWzCoZn2faWR4go8ogp8oYD8oEW6W2W4C','WP1aW5bLWOG','iCo/zSk5WR7cKa4A','WRdcNtC','FSodxJe','WPGOW67cLee','r31c','FmkWW63dM8otw8k9','qMHgaa/dMazuWR7cRf82tW5yWQjlE8ojW6FcMJFdI8kLWPhcPYjtiXpdU21nW74vW6m7WOSSWPfBWO8VW7/cUW','WOSpW73cOv4','W60vWPBdVwm','WQXvW61+','WQ7dQrq','omo5yCkW','W7NcMNuyeG','Ae1WetO','bKFdMCoZAG','uCovWOZdI2S','WRrpW5pcOYbcmCkmW7z2hSo2ACoOWQXwWQT/lG9fshZdK8o6W5GlWRmni8k5kSoHzH7dL8o9W7ajESkjWPHekCovW6hdUCkXWQi4xdBdRMTGWQNdUmkZpY01lSkTW4CMW50SWPb/pCoto3ZcJ8odWPNdSmk4AX8','WQTEW45VWOW','f8oKW7/dGgFdIKP1','n8oACSk8WPi','5Bkn5y+05y+A5yQq5Qwx','rCkRW6ZdPSox','WPfgy8o5nmkEW7pdKCk7xa','W7z+nq','WPxcKmoMW6v6','CCooushcKq','W47cMh4Fn8keW5u','W6joDCotWQ/dOGzrWQe','WPfFhLnoW6u','WPNcI8kgWPCzWQxcKG','WRrfBIxcPSkjwCkQW7K','iSomW73dLZS','WPSJcsfkW7G9WPC','WPdcImk5','na3dTmo/gq','WQO/bx8c','WPFcISkvlty','s2dcOW','W7D2omkN','oSoKW63dSdm','W5nNkNm','nXldICobbG','WRXSCc7cMG','WQlcP8oVW6zZW4ddSSk6WQNcJG','pZ0ZW5xcOqq','WR4sxgNcTG','WOZcHdmzWQS','Bmo1WRa','WOGEsxC','W4pcQCkzla','f8oGW63dGd/dHvC','CmkNW73dM8ovqSkEq8kb','WQuQW6/cQuO','s8kUW63dOmov','smk1WQtdOa','W7FdHCoRfmkvW6ZdRCooW6BdHSoFubBdISkDWPFdN8oJWOvOWPmJW715WRVcSmkZW5lcL8ogWOpdGmkrW4dcQ8oHWR7dMmojW7NdQhDzW5rdpfDTbwlcKmkPCSo9W5z/nSo6AIVdNSouW6SBBmoDW7zPW47cKCkmW5VdOuaQjCkuwxdcLW','bwa5W4RdM8obWPxdOfHbcmkn','WRiOW7xcLh0','WPVcRSk9WR0T','wmkFkSkcW6lcLvu','WPRcJ8kRgSkF','WPFcL8kCgmkq','WPJcImkPcHW','W4JcP8kyhh/cQLVdKW','W6raW4FdOG','WPBcGmoxjW','eCoYy8kUWQG','WPZcNmkhdI8','yuHK5QES','mrFdKSocjCocW4pcRZBdMv7cVwzeW7RcGSonCcFcPNxdUsupW78LWO7dOxJdSSkoW7bFEWiJW43dR8kXW5rMe8kdtSoBWPu','5BYc6kwd5Qsx','WPpcGMWCWP8','W5hcH8kfdwS','W7xdGCoXo8knWRNcSa','jJ00W5W','WPhcQhq0','W7/cG8o6jLG','WRvzEcxcSa','eZdcHG','WPJcGSo5W7Ts','hqBcKLldTG','5zgx5zkV5BgM5y+F5QAM','WPpcMCoNW7a','kJ1gW4em','gbbMW7W2Fq7dN8kG','lCkMW7FcJaW/W7BcOCofW5VcHca','jcyPW4lcM1OSyGeFWRhcVfRcJchcSCowWOGGWOHBg1BdMx3cNSkrDujUmx0xb8otW7eSWQ5stNHuW6RcNSoMW6tcV3VcVIJdRsFcOdhdKNT/CSoyW6HDWOJdLmk1Dmo7W6fcl8kkWPfTaSkvW5tcH8o+xei7hq','WQ/cPSk2n8oLWP8tbL04WPe','W4eej8kGD8oAWPlcJ8oVjq','WRCUW7FcI1C','WPxcHmox','WOBcGmkHnSkF','qSkAW5ddK8kRW7f4htu6p8kFW5HxW7ldKmk/WR7dS8kCt8k1W6PVjq9KWRbdW6FcPtZcTahdQ3ddGmkhfCkNhCksWQxcRLaZWQrt','WOKZCNVcUG','rmkqW4NdJ8oUWRj9ddO5mmoeW4vwWQxdHCk6','DmodrZu','W6DHlLhdTG','W7VdKmoRbq','W7BcNmoldKfatx45WQWbW5LhlmoPuxL2W51dW4hcHcSkW47cKf5MtCk0W5xdSYhdQCo1W5DjsSkQcJZdQuSGW6xdImkkW4BdV3lcGIOSdZdcUSoHW7/cSfpcRfrtWP/dSmopbSkgW7RdMCoYWO7cJSkTvxFdUSo2mCkWWQG','W7/cNmolda','fSkvy8kn','WR7cVSkSfbO','dqSVW5/cIq','FwvKWOtdKc9rjcG5WOG','q8k9WRO','W7VdUSohf8kf','W6ZdHCo+fSksWQxcLCkiW7hdIG','W5NcLMSI'].concat((function(){return['wxvCfXNcKgaF','5zoz5zcq54UY6iUt5QEw','W6T2jSoh','kmkKW5XbW6a','W5VdK8orW4LjW6BdLCkfxeT3sCkr','5RM95y2M5QAu','W7z6iCoIWR7dPmoShCkN','WQhdGrxdH8o+','jH3dVx1I','W7jjpvhdPG','hSknzCkfpmoKzmk5','eXnTW6C','WRxcIdm8WOHbWP17W4dcN8kHW5VdUCo9W7JdMCkkBZPjsZzbnZ7dMKBcOSkSESoAbSoKWQtdM1FdSIZcJLyQWQdcPCkepNnqW5KyWPDdug/cUYJcSGNcJCkBhmorW5JdPZJcSSk0kmkRW7ZdMCokjmoUAmk9WPpcISkFW5u','y8odxJhdKwWtW7xcKdtcNW','uCo9WR7dLvrIW5RdICkQWPpdTKm9eaBcRh/cJSkHkCoPrXFdGmoeWONdUZ5ymCkqlbCOW79ruCkCWQOrWPqzW7BcHmowCCoGaY8gWR9lwabHW5CQmCoRC8o8WQtcQSoTW507W4n5WR5xc8kObSoirNtdSbjlbaDQW4KjAJZcMrtcJ8ozEx4Bumk7W6unzCkhuuvXWPy6hs1aWPryBSkJAh4lW75/e8k4fCk+WRmMW6f3WPSPqM3cUCoVWRJcPmkewq4ZW5HrWRRcNCoZh0y','WOhcJSonitTk','W6/dHmoSda','WRLnycNdRMOUW7NcVCoObSkNW5btda','xwubW5JdJa','WORcVmoRW4DC','W4/cKmolk2i','WO3cH8kC','WQ0Ieh0dgMDK','eZdcGMhdKG','ANhcP8oKwq','ksO1W5VcJWG','WQPkW5tcOam','WRW2W6JcReXP','FCo+WQBdIvu','WQBcR8o2eCkgW5WBbWeGW4ifvZ5DmxxcMCkXeSkXW65ukmk0ySkpALjiWRKNoCkWdYPkWOKLlCkNW7qPa8o/W7LH','W69MqsnsqYi2aCo1','hSkuW6PwW6BdK8kOna','mMpdGW','W745iCkZeMyXWPjxjSoAW6hcGxXR','W4hdK8kuF0yxuJldP8kYWRZdRmkJ','smkvomkcW7S','r31kxr3cHuXgW6m','WPVcQg0W','DCoyqdRcKa','WO07yXxdUW','W7tcULdcMCoZW7TMW7uEbCk8WQNcKc8Ob1KlW5qkt07cTtn8W6uTWRLbW53dQ8ob','WPKZaYXSW7SN','W5ips3JcTSkP','bdNdM0hdTmopFCoHW6NcLr5Lnc/cJSo9jxuScxidhb9Eu3egdmkIW69gjCksvw/dTa3dH0lcSSonxZDHcqO','WPpdQrddOCoe','xgtcSmo7Fgi','WPZcLSkiia','WOOAxG','W7HWnCoYWRNdOmoBhmkWheK','oXNcUvpdLW','lZ0TW4VcMGLKjryYWRS','576f57Q/5QAr','ruqAW4BdLG','W5lcJw0HjCotWP9MW7OXW73cIZpcGc1pW41zW4T5WO0wiK3dNSoMBCo2uSoGALVcISkhWOqdWQJdV8oQcmoarCouWPG6WQC9WPddPmov','W7JcI8kNf2FcV1JdSSo1WONcKCoGWRrE','W7JcGmoff3q','WOJcISoM','WO81oLyT','WQ5zseKQ','WPXja11DW6m','WQ9vygS2ga','WRdcNmktlGi','WROMW77cTqj7WQJcVdLq','W5BcGgS4nCkA','aXqPW4OvhXxdMSo+W4hdRSkVWQRdPcNcVXVcTSoSW6dcL8oAchBdLmkxCxfLW4RdVCojhCkGW6f+l8oCmmkNW7hcGwJdTmo4W5pcNG','WP45ftrRW740WPGZaSoQ','WR3cS8kVia','WQjBW7bX','FmkUW7VdH8onyCkVr8kh','iCo/zSk5WR7cKdq','WQ4VsxpcHW','r2aL','WOiKhmo1','sgdcSCo/r2fi','WPdcISofWRmYW7VcM8kIiui9nSoOFCkRlCkfW4W0W5L1AmkeWPPQCmkzhmkMAZ0/vbWSvJddTg9dktHPhv/dRXq','d8kgW7TfWOxdM8kH','WQDrymoejG','WPhcQmkHo8kKWPWaqa9/W48vuw4HphtdJmkLfmkHWOm8uCoXzCoYrx8DWQ06rSongdCCWRG6j8ohW680v8kKWRj3W77dGMxcPSkhW4GHBCkbW77dObaBWPjpW7RcU8o2h8oQWO7cNbPUWRtdJCkgW7NdP8ofW4nEW4y4WPhcTmkqWOhcTXeRtbVcImk/A8krW47dPeRdRgVcHJxdQ8ovme1WW7qZWOyteCoGWQu9WPSlaSoCW7rcxCorW5iRtqb6bHKmamksW4JcJwddSCkNW5vaW5lcVdFdTdDKvdWXWRWIW742W5q','W53cNg0','5B6b6kEY5QAl','WPJcRg0','t8ktiSkeW7lcI1i','W5NdVmo3WOzW','W7lcK8kjkfG','WPFdTmoFBxhcRXNcLSo2W47dNmoMWQmtuXdcL8olF8ojBq7dOW4JWPlcVtzFEh/dVW','W5z2amodWOG','WPm5c3Olf3qVa8oOWR4InLpdKmkpWRCpW55sW4ZdLgpdPJ/cImkuWRvKW6VcTCofuSkAW6rEhZRdHSohW4yJW6VdJwPxeWWpW5uhW7xcV2nrW4VcNqVdH8kKWR8zWRZcJa8OWO9EW5iDW4vUWO/dKCkNg8k0WO0pdInRrComWOldR8oIW7FdGZZcSmk8W4ioWPWHWO0UWRpcIdhdL3jnESktvmk0W4W+W6G6celcJINdGSogFmkoqMZcTrqQW6SVw8oADCkbov1+W5/cVviDW73dVSopWPJcPW','WOWpwNpcUSo3W5RdTCoeiSomWONcR8kOb0dcT8omW7e4W5FdTmkNxSoVzCkHW70yW7NcNZZcPG7cT1BdNWddR8kPWRVcT08xW4Kf','W6rmW5RdV2S','WPNcG8kfWPvrWRJcK8kJFvPU','WRhdQCk2j8k7WPKcqvC4WPHav2qF','WRKgAtxdQg4DWR7cSW','pmo3zCk7','W5HVna','cIzsW5a8','WOaSbSoW','WRPpEd8','gdJcMgy','WOlcHSox','mCo5EmkNWQNcIYawW47cNYu','axldQSoxtW','eqHWW7KOcudcNCkMW5tcVCoYW7hcRMZcUvVdOmo0WRRdKSoAuZtcNSknjvvkWOldK8kermoTWQiNomoxmSoaWPlcLsNdVCoNW4tcKx/cTYxdLCk9W4xdHmocW7lcGmolEv0/WPZcVeGAWOLEWODXcb/dNdLqwbjSECkKW7G','WONcJCkyWOKoWR7cHSkIBNPK','x2ZcUCo5v39p','W4nKk3JdLa','WPPaguqwWQ0bWPnBWPxcR141uqLUbG','tSkfW5BdLSkNW6e','z3nigrdcJKHuW6BdTXX/beLGWQTnyConWRldNqpcTCktW5ldOr9opXtdVsXYW4qAWR9VW7PUWQyyWPaQW7ldRu/cIe7dTSkNetFcJSo1cWqqWO/cQ8k1xCo8WRdcLbfgiSobWQ4iWRyqWPldLK/dTSoyFYnUWQKsifPBWPNdUWxcRHnoWQT2W7NdOqObW4tcTKjtgsRdRCo7v8oApMHjWObNW60YW6K3eCocjCoXC8koqbOVWQTbWO7cQZKRW4mAW5SPl0SAawtdNmobESkzAainm8kiW5tcGq/dQG','E8oOWQ3dJbqUW5/cG8o5W5hcPXDWCe/cOhG','WRfAW5C','WPvumL5R','W6vBF8oLWRhdOcq','WPpcNCo+W6jrW53dVq','W5zfb0xdSa','WPFcVw0HWRXhF8kkxCoZW4boEmonhfvWW7BcPx5ZW4xcLZZdIdjTW4pdJuZdN8kykYJdTw3dJW','mWJdLmolpG','uCkBomkaW78','WQWmjSoMqq','WQHvA3XVeCoaoCkBfG','W7RdNmoVemkF','bSkgW78','g8oXW7/dKtNcKWW+W4OJWRPIcmk4ubpcRCkexrPfqLj1qvVcImo8jCkOWRNdLNNcKmoDWP3cOmocW4CqzuaNW5rGpg57gZ7dLSkYW6dcVmo0WRhdT8kSpbldI0PhW5pdJLiwW5NcV8kMBtm','W7pcNsSUWO4wWP86W4lcLSkQ','5BkR5y275Pse5Q6Z5QAg','WQ1ZW69gWPm','5zcL5zk+5Bch5y2r5Qwg','W51mi8oHWOe','WOKExN7dVSo9W58','W6Hozq','WP7cGe0fWRW','nSoHimog','W7PZj8o+WQBdH8oDgCkH','W55aF8oLkSkiWO7dKCk1DW','5zga5zg354Qr6iQc5QEG','WPT9qKq2bmoCaSkiaMtdSSk/WO8','odSPW57cJq','DSkEWQNdQSo2','W6NcM8oPn2i','W6ryW5hdPxu','tSknaSkHW74','WOWtsgRcVSoeW5ldOSoH','aCoGW7JdLcBdNq','hbf0W70I','W73cH8orcLCufHi1WR0bW4a','lwBdUCorsW','W6HrW5FdUw1kW6BcNqm','W5TIA8oqWQG','WQRdPqm','WRJcOSk9m8k9WPWv','WRiSW63cOf0','kgtdH8otACkMWPz1W7NdGujBWRv9hrtdR8kZWP1NjCooWP19W53cIhRdS0H5W6edW7xdKmk6imoJCSogW5VdHXqBW5fXWO1iW7TvWPKRWRXUWP/dGZiYW6FdJCoHjSkwrCkNWQRcL37dHeKcWRL/W5hcMCkfoSoQWP4LrCk4','smkiW6JdISoc','W493dmofWQu','t8kolCknW7pcMfpcLG','5BoR5y695PEv5QYb5QAf','eCkBE8kdlCobEmk9','W6DFzCokWQNcTxKxWQhcH8o1W6qyW7OHWQSIW69zW4BcOCo6WQBdOMJdOL16W4RdQGhcMSkfpSkkW79yWRrnd8kWWPKMW61vWPD6hw/dUt7dRWywyCo4WRHAW6BdTCklpIzug2i4W43dSCknjwVcPrRdLmonWR9mW4L6eW','WOCWh3eq','WRWxEsZdRJLIW7JcS8oLd8k/WOTdc8obWQpdTuhdJeTtocnyWRmSWORdPHejWRNdTYRcTqiuWOldKfmwWRpcJJyMW45JWRZdPCkPW5Hfr8ooymoKWO51neOVcCk5ar0cWQRcLL/cMupcRMyYi8o3cCoepGC','pqzjW6S3','tmkDoa','WPyhoSoOsq','jSkiW45jW60','WQyjW5BcH04','tmkBomkl','WO4qxhRcOq','WPdcMCo+W7zw','WQjDW7HXWQ85taOZW7tdPCkBjvBdSezc','WRuZfgnkgNLPqmkJ','W65zzCotWQNdUX9C','WRBcS8oPW7Ly','umkdW47dMmkNW6bQ','gmkBFSkc','lSkGW5zLW64','WP/cKSkwmcW','WPpcOgOsWR0','WROgFXhdSG','rSkOWR7dTmoFW6ysjmo8sLHCdGyIW4NdH8oVW6ZdSg/dKwldQKnruSoOvLmtDGBcLdLiWRNcN3v2tCketmkrav8lW4qzWOCMt8ocWOhcGXpdGCouWRyZWRJcRqzJWPxcUCkNzCoui8kZEmoAaSkab3moBtdcTW','WOxcSqSeWO8pW4igW4BcISk6W5pdV8o6','W5dcR8kieW','W59TW5xdHhO','aMtcU8o8r2arWO3dLCoChW','W5PUd8kElG','5zke5zgjWOVdLmo877+g6iEx5BUX5Q+t5y27g+wiT+s7KfJLPyBLIPZPKjFMJkFVVONNMApMJR/NSAFOTlxLJ7FLJOm','W7RcICoYeLq','W45ay8oxWR8'];}()));}()));}());_0xec71=function(){return _0xda00e8;};return _0xec71();};async function getMediaSourceByMTM(_0x3e8d95,_0x55ff01){const _0x2693f6=_0xf8f7bb,_0x24653a={'EbsMR':function(_0x41dd7e,_0x42c334){return _0x41dd7e===_0x42c334;},'ODtoO':'TIqhe','VltRu':_0x2693f6(0x2b6,'4]*n'),'kaHzb':_0x2693f6(0x138,'8eHD'),'IkuQn':_0x2693f6(0x303,'@6WI'),'OMxnA':_0x2693f6(0x249,'aJQ]'),'AbYtU':_0x2693f6(0x19d,'N(3m'),'NhLfw':_0x2693f6(0x301,'@6WI'),'jFNKu':_0x2693f6(0x26b,'aJQ]'),'wJMBa':_0x2693f6(0x18f,'pxE9'),'ZGzdW':_0x2693f6(0x2d6,'ML8n'),'qXTHt':_0x2693f6(0x1f4,'pxE9'),'PYPLN':_0x2693f6(0x1e9,'HiVL'),'dYyzo':_0x2693f6(0x27f,'B8zN'),'UhaBl':'https://m.music.migu.cn/migu/remoting/cms_detail_tag'};if(_0x55ff01==='standard'&&_0x3e8d95[_0x2693f6(0x29b,'&v!^')])return{'url':_0x3e8d95['url']};else{if(_0x24653a['EbsMR'](_0x55ff01,_0x2693f6(0x17a,'mqfL'))){if(_0x24653a['ODtoO']!==_0x24653a[_0x2693f6(0x2da,'Hm9a')]){const _0x3b71bc={'Accept':_0x24653a['kaHzb'],'Accept-Encoding':_0x24653a[_0x2693f6(0x2a8,'cbSJ')],'Accept-Language':_0x24653a[_0x2693f6(0x1cb,'vPiR')],'Connection':_0x24653a[_0x2693f6(0x145,'TiPS')],'Content-Type':_0x24653a[_0x2693f6(0x238,'N81[')],'Host':_0x24653a[_0x2693f6(0x28c,'Zt*u')],'Referer':'https://m.music.migu.cn/migu/l/?s=149&p=163&c=5200&j=l&id='+_0x3e8d95[_0x2693f6(0x122,'YkUc')],'Sec-Fetch-Dest':_0x24653a[_0x2693f6(0x184,'cbSJ')],'Sec-Fetch-Mode':_0x24653a[_0x2693f6(0x300,'U*Jw')],'Sec-Fetch-Site':_0x24653a['qXTHt'],'User-Agent':_0x24653a[_0x2693f6(0x1f5,'&bNV')],'X-Requested-With':_0x24653a[_0x2693f6(0x19b,'gGIG')]},_0x4fae0e=(await axios_1[_0x2693f6(0x1e1,'vPiR')][_0x2693f6(0x131,'O&CZ')](_0x24653a[_0x2693f6(0x245,'beCd')],{'headers':_0x3b71bc,'params':{'cpid':_0x3e8d95[_0x2693f6(0x144,'oQSE')]}}))[_0x2693f6(0x336,'O&CZ')]['data'];return{'artwork':_0x3e8d95['artwork']||_0x4fae0e[_0x2693f6(0x313,'beCd')],'url':_0x4fae0e['listenUrl']||_0x4fae0e['listenQq']||_0x4fae0e['lisCr']};}else _0x57b120=(_0x1671c5[_0x2693f6(0x155,'mqfL')](/https?:\\/\\/music\\.migu\\.cn\\/v3\\/(?:my|music)\\/playlist\\/([0-9]+)/)||[])[0x1];}}}const qualityLevels={'low':_0xf8f7bb(0x327,'8E03'),'standard':_0xf8f7bb(0x32a,'z2wA'),'high':'lossless','super':_0xf8f7bb(0x212,'lRP9')};async function getMediaSource(_0x19d7d3,_0x2e883c){const _0x4faba6=_0xf8f7bb,_0x5c8ebb=(await axios_1['default'][_0x4faba6(0x161,'iktx')](_0x4faba6(0x2ab,'HiVL')+_0x19d7d3['id']+_0x4faba6(0x28e,'8eHD')+qualityLevels[_0x2e883c]))[_0x4faba6(0x336,'O&CZ')];return{'url':_0x5c8ebb[_0x4faba6(0x306,'vPiR')]['music_url']};}module['exports']={'platform':_0xf8f7bb(0x1ee,'gSmV'),'version':_0xf8f7bb(0x2ad,'dmfG'),'hints':{'importMusicSheet':[_0xf8f7bb(0x198,'N81['),_0xf8f7bb(0x28a,'lRP9'),'\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85']},'primaryKey':['id',_0xf8f7bb(0x341,'beCd')],'cacheControl':_0xf8f7bb(0x1a4,'vLqW'),'srcUrl':'http://music.haitangw.net/cqapi/xiaomi.js','supportedSearchType':['music',_0xf8f7bb(0x16b,'(O2j'),_0xf8f7bb(0x1bf,'N81['),_0xf8f7bb(0x284,'074w'),_0xf8f7bb(0x2f2,'(5n]')],'getMediaSource':getMediaSource,async 'search'(_0x50a452,_0x5ac6b7,_0x370efa){const _0x495faa=_0xf8f7bb,_0x490a51={'Yfnbw':function(_0x3e7dbc,_0x223b44){return _0x3e7dbc===_0x223b44;},'fhziF':_0x495faa(0x2c9,'pxE9'),'JHagx':_0x495faa(0x23d,'dmfG'),'hnBjQ':_0x495faa(0x2e7,'oQSE'),'vrJhZ':_0x495faa(0x27c,'qdOw'),'EHOQm':'artist','WQPOs':_0x495faa(0x1c9,'B8zN'),'QxtUP':'BIplW','vXmUb':function(_0x3fc9b5,_0x377812,_0x2b3b63){return _0x3fc9b5(_0x377812,_0x2b3b63);}};if(_0x490a51[_0x495faa(0x17e,'8E03')](_0x370efa,_0x490a51[_0x495faa(0x348,'5o5K')])){if(_0x490a51['JHagx']===_0x490a51[_0x495faa(0x14f,'qdOw')])return;else return await searchMusic(_0x50a452,_0x5ac6b7);}if(_0x370efa===_0x490a51[_0x495faa(0x258,'4]*n')])return await searchAlbum(_0x50a452,_0x5ac6b7);if(_0x490a51['Yfnbw'](_0x370efa,_0x490a51[_0x495faa(0x342,'Sn%L')]))return await searchArtist(_0x50a452,_0x5ac6b7);if(_0x490a51[_0x495faa(0x1dc,'074w')](_0x370efa,_0x495faa(0x1e6,'YkUc')))return await searchMusicSheet(_0x50a452,_0x5ac6b7);if(_0x490a51[_0x495faa(0x1c5,'gSmV')](_0x370efa,_0x490a51['WQPOs']))return _0x490a51['Yfnbw'](_0x490a51[_0x495faa(0x325,'5o5K')],_0x490a51[_0x495faa(0x2d3,'Zt*u')])?await _0x490a51[_0x495faa(0x211,'mqfL')](searchLyric,_0x50a452,_0x5ac6b7):{'isEnd':!![],'musicList':[]};},async 'getAlbumInfo'(_0x4a8e59){const _0x13e0a3=_0xf8f7bb,_0x735746={'VOhYX':_0x13e0a3(0x234,'HiVL'),'FHpHW':_0x13e0a3(0x14a,'qdOw'),'wsVIP':_0x13e0a3(0x1c8,'Hm9a'),'ruDap':'application/x-www-form-urlencoded;\\x20charset=UTF-8','fVNwz':_0x13e0a3(0x332,'*IV]'),'opqfT':'cors','BeOWf':_0x13e0a3(0x31e,'PA0Y'),'emdXO':_0x13e0a3(0x137,'8E03'),'gukoJ':_0x13e0a3(0x167,'NEtV'),'zBEkF':'https://m.music.migu.cn/migu/remoting/cms_album_detail_tag'},_0x557535={'Accept':_0x735746[_0x13e0a3(0x22b,'Sn%L')],'Accept-Encoding':_0x735746[_0x13e0a3(0x2e1,'U*Jw')],'Accept-Language':_0x13e0a3(0x33c,'Sn%L'),'Connection':_0x735746[_0x13e0a3(0x16a,'5o5K')],'Content-Type':_0x735746['ruDap'],'Host':_0x735746['fVNwz'],'Referer':_0x13e0a3(0x19c,'uQLh')+_0x4a8e59['id'],'Sec-Fetch-Dest':'empty','Sec-Fetch-Mode':_0x735746['opqfT'],'Sec-Fetch-Site':_0x735746[_0x13e0a3(0x25f,'#xe!')],'User-Agent':_0x735746['emdXO'],'X-Requested-With':_0x735746[_0x13e0a3(0x2ce,'(@fk')]},_0x4ff8a8=(await axios_1[_0x13e0a3(0x12a,'N(3m')][_0x13e0a3(0x233,'dzCs')](_0x13e0a3(0x1b7,'vPiR'),{'headers':_0x557535,'params':{'albumId':_0x4a8e59['id'],'pageSize':0x1e}}))['data']||{},_0x5302cf=(await axios_1['default'][_0x13e0a3(0x242,'Zt*u')](_0x735746[_0x13e0a3(0x1e3,'iktx')],{'headers':_0x557535,'params':{'albumId':_0x4a8e59['id']}}))[_0x13e0a3(0x21b,'U*Jw')]||{};return{'albumItem':{'description':_0x5302cf['albumIntro']},'musicList':_0x4ff8a8['result'][_0x13e0a3(0x264,'Sn%L')][_0x13e0a3(0x250,'NEtV')](_0x1440c0=>({'id':_0x1440c0[_0x13e0a3(0x2d1,'z2wA')],'artwork':_0x1440c0['picL'],'title':_0x1440c0[_0x13e0a3(0x20d,'&bNV')],'artist':(_0x1440c0['singerName']||[])[_0x13e0a3(0x2b0,'oQSE')](',\\x20'),'album':_0x4a8e59[_0x13e0a3(0x2d9,'cbSJ')],'url':musicCanPlayFilter(_0x1440c0),'rawLrc':_0x1440c0[_0x13e0a3(0x1d4,'8E03')],'copyrightId':_0x1440c0[_0x13e0a3(0x1a0,'dmfG')],'singerId':_0x1440c0[_0x13e0a3(0x311,'HiVL')]}))};},'getArtistWorks':getArtistWorks,'getLyric':getLyric,'importMusicSheet':importMusicSheet,'getTopLists':getTopLists,'getTopListDetail':getTopListDetail,'getRecommendSheetTags':getRecommendSheetTags,'getRecommendSheetsByTag':getRecommendSheetsByTag,'getMusicSheetInfo':getMusicSheetInfo};var version_ = 'jsjiami.com.v7';", "id": "msg_1789568448032"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 元力MG, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568448032: True [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 元力MG [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌曲宝 [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6b4c\u66f2\u5b9d", "code": "var $aeeUC$axios = require(\"axios\");\nvar $aeeUC$cheerio = require(\"cheerio\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"host\", () => $f143b11fc67a70bd$export$5e032988b71f6158);\n$parcel$export(module.exports, \"default\", () => $f143b11fc67a70bd$export$2e2bcd8739ae039);\n\n\n\nasync function $19a45cbfdc5a1d1d$var$searchMusic(query, page) {\n let keyword = encodeURIComponent(query);\n let serchUrl = (0, $f143b11fc67a70bd$export$5e032988b71f6158) + \"/s/\" + keyword;\n let songs = [];\n let searchRes = (await (0, ($parcel$interopDefault($aeeUC$axios))).get(serchUrl, {\n timeout: 5000\n })).data;\n const $ = $aeeUC$cheerio.load(searchRes);\n var rowList = $(\".card-text\").find(\".row\").slice(1);\n for(let i = 0; i < rowList.length; i++){\n var id = $(rowList[i]).find(\"a.music-link\").attr(\"href\").match(/\\/music\\/(\\d+)/)[1];\n var title = $(rowList[i]).find(\"a.music-link span\").eq(0).text().toString().trim();\n var artist = $(rowList[i]).find(\"small\").text().toString().trim();\n songs.push({\n id: id,\n title: title,\n artist: artist\n });\n }\n return {\n isEnd: true,\n data: songs\n };\n}\nasync function $19a45cbfdc5a1d1d$export$2e2bcd8739ae039(query, page, type) {\n if (type === \"music\") return $19a45cbfdc5a1d1d$var$searchMusic(query, page);\n}\n\n\n\n\nconst $f143b11fc67a70bd$export$5e032988b71f6158 = \"https://www.gequbao.com\";\nasync function $f143b11fc67a70bd$var$getMediaSource(musicItem, quality) {\n // https://www.gequbao.com/music/5465\n let tempUrl = $f143b11fc67a70bd$export$5e032988b71f6158 + \"/music/\" + musicItem.id;\n let tempRes = (await (0, ($parcel$interopDefault($aeeUC$axios))).get(tempUrl, {\n timeout: 5000\n })).data;\n let id = \"\";\n const scriptContent = tempRes.match(/]*>[\\s\\S]*?window\\.appData\\s*=\\s*({.*?});[\\s\\S]*?<\\/script>/i);\n if (scriptContent && scriptContent[1]) {\n const appData = JSON.parse(scriptContent[1]);\n id = appData.play_id;\n }\n let serchUrl = $f143b11fc67a70bd$export$5e032988b71f6158 + \"/api/play-url\";\n var body = \"id=\" + id;\n var headers = {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"Connection\": \"Keep-Alive\"\n };\n var searchRes = await (0, ($parcel$interopDefault($aeeUC$axios))).post(serchUrl, body, {\n headers: headers,\n timeout: 100000\n }); //log(html)\n return {\n url: searchRes.data.data.url\n };\n}\nasync function $f143b11fc67a70bd$var$getLyric(musicItem) {\n let serchUrl = $f143b11fc67a70bd$export$5e032988b71f6158 + \"/music/\" + musicItem.id;\n let searchRes = (await (0, ($parcel$interopDefault($aeeUC$axios))).get(serchUrl, {\n timeout: 5000\n })).data;\n const $ = $aeeUC$cheerio.load(searchRes);\n return {\n rawLrc: $(\"#content-lrc\").text().toString()\n };\n}\nasync function $f143b11fc67a70bd$var$getRecommendSheetTags() {\n try {\n var result = {};\n var datas = [];\n var pinned = [];\n pinned.push({\n id: \"/history/\",\n title: \"\u6700\u65b0\u641c\u7d22\"\n });\n pinned.push({\n id: \"/top/yesterday\",\n title: \"\u6628\u65e5\u641c\u7d22\"\n });\n pinned.push({\n id: \"/top/week\",\n title: \"\u672c\u5468\u641c\u7d22\"\n });\n pinned.push({\n id: \"/top/month\",\n title: \"\u672c\u6708\u641c\u7d22\"\n });\n pinned.push({\n id: \"/top/last_month\",\n title: \"\u4e0a\u6708\u641c\u7d22\"\n });\n datas.push({\n title: \"\u641c\u7d22\u8bb0\u5f55\",\n data: pinned\n });\n result.data = datas;\n result.pinned = pinned;\n return result;\n } catch (e) {\n console.log(e);\n }\n}\nasync function $f143b11fc67a70bd$var$getRecommendSheetsByTag(tag, page) {\n try {\n var result = {};\n var sheets = [];\n var searchUrl = \"\";\n if (tag.id.toString().startsWith(\"/history\")) searchUrl = $f143b11fc67a70bd$export$5e032988b71f6158 + tag.id + page;\n else if (tag.id.toString().startsWith(\"/top\")) searchUrl = $f143b11fc67a70bd$export$5e032988b71f6158 + tag.id + \"?page=\" + page;\n else if (tag.id.toString() == \"\") searchUrl = $f143b11fc67a70bd$export$5e032988b71f6158 + \"/history/\" + page;\n let searchRes = (await (0, ($parcel$interopDefault($aeeUC$axios))).get(searchUrl, {\n timeout: 5000\n })).data;\n const $ = $aeeUC$cheerio.load(searchRes);\n var rowList = $(\"tbody\").find(\"tr\");\n for(let i = 0; i < rowList.length; i++){\n var id = $(rowList[i]).find(\"td a\").attr(\"href\");\n var title = $(rowList[i]).find(\"td a\").attr(\"href\").toString().trim().replace(\"/s/\", \"\");\n sheets.push({\n id: id,\n title: title,\n description: '\"' + title + '\"\u7684\u641c\u7d22\u8bb0\u5f55'\n });\n }\n result.data = sheets;\n result.isEnd = sheets.length < 10;\n return result;\n } catch (e) {}\n}\nasync function $f143b11fc67a70bd$var$getMusicSheetInfo(sheetItem, page) {\n try {\n var result = {\n sheetItem: {\n ...sheetItem\n }\n };\n let searchRes = await (0, $19a45cbfdc5a1d1d$export$2e2bcd8739ae039)(sheetItem.title, page, \"music\");\n result.musicList = searchRes.data;\n result.isEnd = searchRes.isEnd;\n } catch (e) {\n console.log(e);\n }\n return result;\n}\nconst $f143b11fc67a70bd$var$pluginInstance = {\n platform: \"\u6b4c\u66f2\u5b9d\",\n version: \"0.0.6\",\n author: \"SoEasy\u540c\u5b66\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/gequbao.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\n \"music\"\n ],\n search: $19a45cbfdc5a1d1d$export$2e2bcd8739ae039,\n getMediaSource: $f143b11fc67a70bd$var$getMediaSource,\n getLyric: $f143b11fc67a70bd$var$getLyric,\n getRecommendSheetTags: $f143b11fc67a70bd$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $f143b11fc67a70bd$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $f143b11fc67a70bd$var$getMusicSheetInfo\n};\n(0, $19a45cbfdc5a1d1d$export$2e2bcd8739ae039)(\"\u660e\u5929\u4f1a\u66f4\u597d\", 1, \"music\").then((res)=>{\n console.log(res);\n $f143b11fc67a70bd$var$getMediaSource(res.data[0], \"standard\").then((res)=>{\n console.log(res);\n });\n $f143b11fc67a70bd$var$getLyric(res.data[0]).then((res)=>{\n console.log(res);\n });\n});\nvar /*getRecommendSheetTags().then((res) => {\n console.log(res)\n getRecommendSheetsByTag(res.data[0].data[0], 1).then((res) => {\n console.log(res)\n getMusicSheetInfo(res.data[0], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.musicList[0]).then((res) => {\n console.log(res)\n })\n })\n })\n})*/ $f143b11fc67a70bd$export$2e2bcd8739ae039 = $f143b11fc67a70bd$var$pluginInstance;\n\n\n//# sourceMappingURL=gequbao.js.map", "id": "msg_1789568448435"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 歌曲宝, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568448435: True [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 歌曲宝 [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水qishui音乐 [2026-09-16 22:20:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:20:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u6c7d\u6c34qishui\u97f3\u4e50", "code": "\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n \"value\": true\n});\n\nconst axios = require(\"axios\");\n\n// ============================================\n// \u5e38\u91cf\u5b9a\u4e49\n// ============================================\n\n/**\n * \u6bcf\u9875\u8fd4\u56de\u7684\u6570\u636e\u6570\u91cf\n * @constant {number}\n */\nconst PAGE_SIZE = 20;\n\n/**\n * \u6296\u97f3\u56fe\u7247 CDN \u57fa\u7840 URL\n * @constant {string}\n */\nconst DOUYIN_IMAGE_BASE_URL = \"https://p3-luna.douyinpic.com/img/\";\n\n/**\n * \u6c7d\u6c34\u97f3\u4e50 API \u8bf7\u6c42\u5934\n * @constant {Object}\n */\nconst QISHUI_API_HEADERS = {\n \"Accept\": \"*/*\",\n \"Content-Type\": \"application/json; charset=UTF-8\",\n \"User-Agent\": \"com.luna.music/100159040 (Linux; U; Android 11; zh_CN; Cronet/TTNetVersion:dd1b0931 2024-06-28 QuicVersion:d299248d 2024-04-09)\",\n \"X-Argus\": \"=\",\n \"x-common-params-v2\": \"channel=appstore&aid=8478&device_id=1100210274091033\"\n};\n\n/**\n * \u97f3\u9891\u64ad\u653e\u8bf7\u6c42\u5934\n * @constant {Object}\n */\nconst AUDIO_PLAYBACK_HEADERS = {\n \"Accept\": \"*/*\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n \"Cache-Control\": \"no-cache\",\n \"Pragma\": \"no-cache\",\n \"Range\": \"bytes=0-\",\n \"Referer\": \"https://www.douyin.com/\",\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36\"\n};\n\n/**\n * \u6c7d\u6c34 VIP \u64ad\u653e\u63a5\u53e3\u914d\u7f6e\n */\nconst QISHUI_VIP_API_BASE = \"http://api.vsaa.cn/api/music.qishui.vip\";\nconst QISHUI_VIP_PROXY_SERVER = \"https://proxy.qishui.vsaa.cn/qishui/proxy\";\n\n// ============================================\n// \u5de5\u5177\u51fd\u6570\n// ============================================\n\n/**\n * \u6784\u5efa\u6296\u97f3\u56fe\u7247 URL\n * @param {string} uri - \u56fe\u7247 URI\n * @param {string} templatePrefix - \u6a21\u677f\u524d\u7f00\n * @param {string} [size='960:960'] - \u56fe\u7247\u5c3a\u5bf8\n * @returns {string} \u5b8c\u6574\u7684\u56fe\u7247 URL\n */\nfunction buildDouyinImageUrl(uri, templatePrefix, size = '960:960') {\n return `${DOUYIN_IMAGE_BASE_URL}${uri}~${templatePrefix}-resize:${size}.png`;\n}\n\n/**\n * \u83b7\u53d6 VIP \u6807\u8bb0\n * @param {boolean} isVipOnly - \u662f\u5426\u4ec5\u9650 VIP\n * @returns {number} VIP \u4ed8\u8d39\u6807\u8bb0\uff081=VIP\uff0c0=\u514d\u8d39\uff09\n */\nfunction getVipFee(isVipOnly) {\n return isVipOnly === true ? 1 : 0;\n}\n\n// ============================================\n// \u6570\u636e\u8f6c\u6362\u51fd\u6570\n// ============================================\n\n/**\n * \u5c06\u641c\u7d22\u7ed3\u679c\u9879\u8f6c\u6362\u4e3a\u6807\u51c6\u97f3\u4e50\u4fe1\u606f\u683c\u5f0f\n * @param {Object} searchItem - \u641c\u7d22 API \u8fd4\u56de\u7684\u97f3\u4e50\u9879\n * @returns {Object} \u6807\u51c6\u5316\u7684\u97f3\u4e50\u4fe1\u606f\u5bf9\u8c61\n *\n * @example\n * const musicInfo = parseSearchResultItem(rawItem);\n * // Returns: { id, title, artist, artwork, qualities }\n */\nfunction parseSearchResultItem(searchItem) {\n const vipFee = getVipFee(searchItem?.[\"qishui_label_info\"]?.[\"only_vip_playable\"]);\n\n // \u63d0\u4f9b\u57fa\u7840\u97f3\u8d28\u652f\u6301\uff08\u6c7d\u6c34\u97f3\u4e50\u6682\u65e0\u8be6\u7ec6\u97f3\u8d28\u4fe1\u606fAPI\uff09\n const qualities = {\n \"128k\": { bitrate: 128000 },\n \"320k\": { bitrate: 320000 },\n \"flac\": { bitrate: 1411000 },\n };\n\n // \u4fdd\u5b58\u4f5c\u8005\u4fe1\u606f\uff0c\u7528\u4e8e\u8be6\u60c5\u8df3\u8f6c\n const authorInfo = searchItem.author_info || {};\n const singerList = (authorInfo.id || authorInfo.name) ? [{\n id: authorInfo.id,\n name: authorInfo.name,\n avatar: authorInfo.avatar || \"\",\n }] : [];\n\n return {\n \"id\": searchItem.item_id,\n \"title\": searchItem.title,\n \"artist\": searchItem.author_info.name,\n \"singerList\": singerList,\n \"artwork\": searchItem.cover_url,\n \"qualities\": qualities,\n \"fee\": vipFee\n };\n}\n\n/**\n * \u5c06\u6392\u884c\u699c\u66f2\u76ee\u6570\u636e\u8f6c\u6362\u4e3a\u6807\u51c6\u97f3\u4e50\u4fe1\u606f\u683c\u5f0f\n * @param {Object} rankItem - \u6392\u884c\u699c API \u8fd4\u56de\u7684\u66f2\u76ee\u9879\n * @returns {Object} \u6807\u51c6\u5316\u7684\u97f3\u4e50\u4fe1\u606f\u5bf9\u8c61\uff08\u5305\u542b\u4e13\u8f91\u4fe1\u606f\uff09\n *\n * @example\n * const musicInfo = parseRankTrackItem(rankItem);\n * // Returns: { id, title, artist, artistId, album, albumId, artwork, qualities }\n */\nfunction parseRankTrackItem(rankItem) {\n const track = rankItem.track;\n const vipFee = getVipFee(track?.[\"label_info\"]?.[\"only_vip_playable\"]);\n const coverUri = track.album.url_cover.uri;\n const coverTemplate = track.album.url_cover.template_prefix;\n\n // \u63d0\u4f9b\u57fa\u7840\u97f3\u8d28\u652f\u6301\n const qualities = {\n \"128k\": { bitrate: 128000 },\n \"320k\": { bitrate: 320000 },\n \"flac\": { bitrate: 1411000 },\n };\n\n // \u4fdd\u5b58\u6b4c\u624b\u4fe1\u606f\u5217\u8868\uff0c\u7528\u4e8e\u8be6\u60c5\u8df3\u8f6c\n const singerList = (track.artists || []).map(a => ({\n id: a.id,\n name: a.name,\n avatar: a.avatar || \"\",\n }));\n\n return {\n \"id\": track.id,\n \"title\": track.name,\n \"artist\": track.artists[0].name,\n \"artistId\": track.artists[0].id,\n \"singerList\": singerList,\n \"album\": track.album.name,\n \"albumId\": track.album.id,\n \"artwork\": buildDouyinImageUrl(coverUri, coverTemplate),\n \"qualities\": qualities,\n \"fee\": vipFee\n };\n}\n\n/**\n * \u5c06\u66f2\u76ee\u6570\u636e\u8f6c\u6362\u4e3a\u6807\u51c6\u97f3\u4e50\u4fe1\u606f\u683c\u5f0f\n * @param {Object} track - API \u8fd4\u56de\u7684\u66f2\u76ee\u5bf9\u8c61\n * @returns {Object} \u6807\u51c6\u5316\u7684\u97f3\u4e50\u4fe1\u606f\u5bf9\u8c61\n *\n * @example\n * const musicInfo = parseTrackItem(track);\n * // Returns: { id, title, artist, artistId, album, albumId, artwork, qualities }\n */\nfunction parseTrackItem(track) {\n const vipFee = getVipFee(track?.[\"label_info\"]?.[\"only_vip_playable\"]);\n const coverUri = track.album.url_cover.uri;\n const coverTemplate = track.album.url_cover.template_prefix;\n\n // \u63d0\u4f9b\u57fa\u7840\u97f3\u8d28\u652f\u6301\n const qualities = {\n \"128k\": { bitrate: 128000 },\n \"320k\": { bitrate: 320000 },\n \"flac\": { bitrate: 1411000 },\n };\n\n // \u4fdd\u5b58\u6b4c\u624b\u4fe1\u606f\u5217\u8868\uff0c\u7528\u4e8e\u8be6\u60c5\u8df3\u8f6c\n const singerList = (track.artists || []).map(a => ({\n id: a.id,\n name: a.name,\n avatar: a.avatar || \"\",\n }));\n\n return {\n \"id\": track.id,\n \"title\": track.name,\n \"artist\": track.artists[0].name,\n \"artistId\": track.artists[0].id,\n \"singerList\": singerList,\n \"album\": track.album.name,\n \"albumId\": track.album.id,\n \"artwork\": buildDouyinImageUrl(coverUri, coverTemplate),\n \"qualities\": qualities,\n \"fee\": vipFee\n };\n}\n\n/**\n * \u5c06\u6b4c\u5355\u5a92\u4f53\u8d44\u6e90\u8f6c\u6362\u4e3a\u6807\u51c6\u97f3\u4e50\u4fe1\u606f\u683c\u5f0f\n * @param {Object} mediaResource - \u6b4c\u5355 API \u8fd4\u56de\u7684\u5a92\u4f53\u8d44\u6e90\u5bf9\u8c61\n * @returns {Object} \u6807\u51c6\u5316\u7684\u97f3\u4e50\u4fe1\u606f\u5bf9\u8c61\n *\n * @example\n * const musicInfo = parsePlaylistMediaResource(resource);\n * // Returns: { id, title, artist, artistId, album, albumId, artwork, qualities }\n */\nfunction parsePlaylistMediaResource(mediaResource) {\n const track = mediaResource.entity.track_wrapper.track;\n const vipFee = getVipFee(track?.[\"label_info\"]?.[\"only_vip_playable\"]);\n const coverUri = track.album.url_cover.uri;\n const coverTemplate = track.album.url_cover.template_prefix;\n\n // \u63d0\u4f9b\u57fa\u7840\u97f3\u8d28\u652f\u6301\n const qualities = {\n \"128k\": { bitrate: 128000 },\n \"320k\": { bitrate: 320000 },\n \"flac\": { bitrate: 1411000 },\n };\n\n return {\n \"id\": track.id,\n \"title\": track.name,\n \"artist\": track.artists[0].name,\n \"artistId\": track.artists[0].id,\n \"album\": track.album.name,\n \"albumId\": track.album.id,\n \"artwork\": buildDouyinImageUrl(coverUri, coverTemplate),\n \"qualities\": qualities,\n \"fee\": vipFee\n };\n}\n\n/**\n * \u5c06\u63a8\u8350\u6b4c\u5355\u5757\u6570\u636e\u8f6c\u6362\u4e3a\u6807\u51c6\u6b4c\u5355\u4fe1\u606f\u683c\u5f0f\n * @param {Object} playlistBlock - \u63a8\u8350 API \u8fd4\u56de\u7684\u6b4c\u5355\u5757\u5bf9\u8c61\n * @returns {Object} \u6807\u51c6\u5316\u7684\u6b4c\u5355\u4fe1\u606f\u5bf9\u8c61\n *\n * @example\n * const playlistInfo = parseRecommendPlaylistBlock(block);\n * // Returns: { id, title, artist, createUserId, description, artwork, createTime }\n */\nfunction parseRecommendPlaylistBlock(playlistBlock) {\n const playlist = playlistBlock.resources[0].entity.playlist;\n const vipFee = getVipFee(playlist?.[\"label_info\"]?.[\"only_vip_playable\"]);\n const coverUri = playlist.url_cover.uri;\n const coverTemplate = playlist.url_cover.template_prefix;\n\n return {\n \"id\": playlist.id,\n \"title\": playlist.title,\n \"artist\": playlist.owner.nickname,\n \"createUserId\": playlist.owner.id,\n \"description\": playlist.desc,\n \"artwork\": buildDouyinImageUrl(coverUri, coverTemplate),\n \"createTime\": playlist.create_time,\n \"fee\": vipFee\n };\n}\n\n/**\n * \u5c06\u8bc4\u8bba\u6570\u636e\u8f6c\u6362\u4e3a\u6807\u51c6\u8bc4\u8bba\u4fe1\u606f\u683c\u5f0f\n * @param {Object} comment - API \u8fd4\u56de\u7684\u8bc4\u8bba\u5bf9\u8c61\n * @returns {Object} \u6807\u51c6\u5316\u7684\u8bc4\u8bba\u4fe1\u606f\u5bf9\u8c61\n *\n * @example\n * const commentInfo = parseCommentItem(comment);\n * // Returns: { id, nickName, avatar, comment, like, createAt }\n */\nfunction parseCommentItem(comment) {\n const createDate = new Date(comment.time_created);\n\n return {\n \"id\": comment.id,\n \"nickName\": comment.user.nickname,\n \"avatar\": comment.user.medium_avatar_url && comment.user.medium_avatar_url.urls[0],\n \"comment\": comment.content,\n \"like\": comment.count_digged,\n \"createAt\": createDate.toLocaleString()\n };\n}\n\n// ============================================\n// \u6838\u5fc3 API \u51fd\u6570\n// ============================================\n\n/**\n * \u641c\u7d22\u97f3\u4e50\n * @async\n * @param {string} keyword - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\uff08\u4ece1\u5f00\u59cb\uff09\n * @returns {Promise} \u641c\u7d22\u7ed3\u679c\u5bf9\u8c61\n * @returns {boolean} return.isEnd - \u662f\u5426\u5df2\u5230\u6700\u540e\u4e00\u9875\n * @returns {Array} return.data - \u97f3\u4e50\u5217\u8868\n *\n * @description\n * \u901a\u8fc7\u706b\u5c71\u5f15\u64ce\u641c\u7d22 API \u641c\u7d22\u6c7d\u6c34\u97f3\u4e50\u5e93\u4e2d\u7684\u6b4c\u66f2\n *\n * @example\n * const result = await searchMusic(\"\u5468\u6770\u4f26\", 1);\n * // Returns: { isEnd: false, data: [...] }\n */\nasync function searchMusic(keyword, page) {\n const offset = (page - 1) * PAGE_SIZE;\n const response = await axios.default.get(\"https://api-vehicle.volcengine.com/v2/search/type\", {\n \"params\": {\n \"keyword\": keyword,\n \"search_type\": \"music\",\n \"limit\": PAGE_SIZE,\n \"real_offset\": offset,\n \"search_source\": \"qishui\"\n }\n });\n\n const apiData = response.data;\n const musicList = apiData.data.list.map(parseSearchResultItem);\n\n return {\n \"isEnd\": apiData.data.list.length === 0 || apiData.data.list.length < PAGE_SIZE ? true : false,\n \"data\": musicList\n };\n}\n\n/**\n * \u83b7\u53d6\u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\uff08\u5305\u542b\u6b4c\u8bcd\uff09\n * @async\n * @param {Object} musicItem - \u97f3\u4e50\u5bf9\u8c61\n * @param {string} musicItem.id - \u97f3\u4e50 ID\n * @returns {Promise} \u97f3\u4e50\u8be6\u7ec6\u4fe1\u606f\n * @returns {string} return.artwork - \u5c01\u9762\u56fe URL\n * @returns {string} return.rawLrc - \u539f\u59cb\u6b4c\u8bcd\u6587\u672c\uff08LRC \u683c\u5f0f\uff09\n *\n * @description\n * \u901a\u8fc7\u97f3\u4e50 ID \u83b7\u53d6\u5c01\u9762\u548c\u6b4c\u8bcd\u4fe1\u606f\n *\n * @example\n * const info = await getMusicDetailInfo({ id: \"123456\" });\n * // Returns: { artwork: \"...\", rawLrc: \"...\" }\n */\nasync function getMusicDetailInfo(musicItem) {\n const response = await axios.default.get(\"https://api-vehicle.volcengine.com/v2/custom/contents\", {\n \"params\": {\n \"sources\": \"qishui\",\n \"need_author\": true,\n \"need_album\": true,\n \"need_ugc\": true,\n \"need_stat\": true,\n \"item_ids\": musicItem.id\n }\n });\n\n const apiData = response.data;\n\n return {\n \"artwork\": apiData.data.list[0].cover_url,\n \"rawLrc\": apiData.data.list[0].lyric_info.lyric_text\n };\n}\n\n/**\n * \u83b7\u53d6\u97f3\u4e50\u5b8c\u6574\u4fe1\u606f\uff08\u7528\u4e8ePlayById\u529f\u80fd\uff09\n * @async\n * @param {Object} musicBase - \u97f3\u4e50\u57fa\u7840\u5bf9\u8c61\n * @param {string} musicBase.id - \u97f3\u4e50 ID\n * @returns {Promise} \u97f3\u4e50\u5b8c\u6574\u4fe1\u606f\n */\nasync function getMusicInfo(musicBase) {\n // \u5982\u679c\u5df2\u6709\u5b8c\u6574\u4fe1\u606f\uff08artwork\u548cqualities\uff09\uff0c\u76f4\u63a5\u8fd4\u56de\uff0c\u907f\u514d\u91cd\u590d\u8bf7\u6c42\n if (musicBase.artwork && musicBase.qualities && Object.keys(musicBase.qualities).length > 0) {\n return {\n id: musicBase.id,\n title: musicBase.title,\n artist: musicBase.artist,\n album: musicBase.album,\n albumId: musicBase.albumId,\n artwork: musicBase.artwork,\n qualities: musicBase.qualities,\n fee: musicBase.fee,\n platform: '\u6c7d\u6c34\u97f3\u4e50',\n };\n }\n\n const songId = musicBase.id || musicBase.item_id;\n if (!songId) {\n console.error('[\u6c7d\u6c34\u97f3\u4e50] getMusicInfo: \u7f3a\u5c11\u6709\u6548\u7684\u6b4c\u66f2ID');\n return null;\n }\n\n try {\n const response = await axios.default.get(\"https://api-vehicle.volcengine.com/v2/custom/contents\", {\n \"params\": {\n \"sources\": \"qishui\",\n \"need_author\": true,\n \"need_album\": true,\n \"need_ugc\": true,\n \"need_stat\": true,\n \"item_ids\": songId\n }\n });\n\n const apiData = response.data;\n if (!apiData.data || !apiData.data.list || apiData.data.list.length === 0) {\n console.error('[\u6c7d\u6c34\u97f3\u4e50] getMusicInfo: \u672a\u627e\u5230\u6b4c\u66f2\u4fe1\u606f');\n return null;\n }\n\n const item = apiData.data.list[0];\n const vipFee = getVipFee(item?.[\"qishui_label_info\"]?.[\"only_vip_playable\"]);\n\n // \u6784\u5efa\u97f3\u8d28\u4fe1\u606f\n const qualities = {\n \"128k\": { bitrate: 128000 },\n \"320k\": { bitrate: 320000 },\n \"flac\": { bitrate: 1411000 },\n };\n\n // \u6784\u5efa\u6b4c\u624b\u5217\u8868\n const authorInfo = item.author_info || {};\n const singerList = (authorInfo.id || authorInfo.name) ? [{\n id: authorInfo.id,\n name: authorInfo.name,\n avatar: authorInfo.avatar || \"\",\n }] : [];\n\n return {\n id: songId,\n title: (item.title || ''),\n artist: item.author_info?.name || '',\n album: item.album_info?.name || '',\n artwork: item.cover_url,\n duration: item.duration ? Math.floor(item.duration / 1000) : undefined,\n qualities: qualities,\n fee: vipFee,\n platform: '\u6c7d\u6c34\u97f3\u4e50',\n singerList,\n };\n } catch (error) {\n console.error('[\u6c7d\u6c34\u97f3\u4e50] getMusicInfo \u9519\u8bef:', error.message);\n return null;\n }\n}\n\n/**\n * \u83b7\u53d6\u97f3\u4e50\u64ad\u653e\u6e90\uff08VIP \u63a5\u53e3\uff09\n * @async\n * @param {Object} musicItem - \u97f3\u4e50\u5bf9\u8c61\n * @param {string} musicItem.id - \u97f3\u4e50 ID\n * @param {string} quality - \u97f3\u8d28\uff08\u5982 \"128k\", \"320k\", \"flac\" \u7b49\uff09\n * @returns {Promise} \u64ad\u653e\u6e90\u4fe1\u606f\n */\nasync function getMusicPlaybackSource(musicItem, quality = \"128k\") {\n if (!musicItem?.id) return null;\n\n try {\n const qualityToLevel = {\n \"128k\": \"standard\",\n \"320k\": \"high\",\n \"flac\": \"lossless\",\n };\n const level = qualityToLevel[quality] || \"standard\";\n\n // 1. \u83b7\u53d6\u539f\u59cb\u97f3\u6e90\u4fe1\u606f\n const response = await axios.default.get(QISHUI_VIP_API_BASE, {\n params: { act: \"song\", id: musicItem.id, level },\n timeout: 15000\n });\n\n const song = response?.data?.data?.[0];\n if (!song?.url) return null;\n\n // 2. \u65e0\u9700\u89e3\u5bc6\uff1a\u76f4\u63a5\u8fd4\u56de\n if (!song.ekey) {\n return { url: song.url };\n }\n\n // 3. \u9700\u8981\u89e3\u5bc6\uff1a\u8c03\u7528\u4ee3\u7406\u670d\u52a1\n try {\n const proxyRes = await axios.default.post(\n QISHUI_VIP_PROXY_SERVER,\n {\n url: song.url,\n key: song.ekey,\n filename: song.name,\n ext: \"aac\"\n },\n {\n timeout: 60000,\n headers: { \"Content-Type\": \"application/json\" }\n }\n );\n\n if (proxyRes.data?.code === 200 && proxyRes.data?.url) {\n return { url: proxyRes.data.url };\n } else {\n console.warn(\"[\u6c7d\u6c34\u97f3\u4e50] \u4ee3\u7406\u670d\u52a1\u8fd4\u56de\u9519\u8bef:\", proxyRes.data?.msg || \"\u672a\u77e5\u9519\u8bef\");\n }\n } catch (err) {\n console.warn(\"[\u6c7d\u6c34\u97f3\u4e50] \u4ee3\u7406\u8bf7\u6c42\u5931\u8d25\uff0c\u56de\u9000\u5230\u539f\u59cb\u5730\u5740:\", err.message);\n }\n\n return {\n needDecrypt: true,\n decryptKey: song.ekey,\n _note: \"\u9700\u672c\u5730\u89e3\u5bc6\uff0c\u8bf7\u786e\u4fdd\u4ee3\u7406\u670d\u52a1\u8fd0\u884c\"\n };\n } catch (error) {\n console.error(`[\u6c7d\u6c34\u97f3\u4e50] \u83b7\u53d6\u64ad\u653e\u6e90\u9519\u8bef: ${error.message}`);\n return {\n url: \"\"\n };\n }\n}\n\n/**\n * \u83b7\u53d6\u6392\u884c\u699c\u5217\u8868\n * @async\n * @returns {Promise>} \u6392\u884c\u699c\u5206\u7ec4\u5217\u8868\n *\n * @description\n * \u8fd4\u56de\u56fa\u5b9a\u7684\u6392\u884c\u699c\u5217\u8868\uff08\u70ed\u6b4c\u699c\u3001\u65b0\u6b4c\u699c\u3001\u6b27\u7f8e\u699c\u3001\u97f3\u4e50\u4eba\u6b4c\u66f2\u699c\uff09\n *\n * @example\n * const topLists = await getTopLists();\n * // Returns: [{ title: \"\u9ed8\u8ba4\u6392\u884c\u699c\", data: [...] }]\n */\nasync function getTopLists() {\n return [{\n \"title\": \"\u9ed8\u8ba4\u6392\u884c\u699c\",\n \"data\": [{\n \"id\": \"7036274230471712007\",\n \"description\": \"\u6c7d\u6c34\u97f3\u4e50\u5185\u6bcf\u5468\u70ed\u5ea6\u6700\u9ad8\u768450\u9996\u6b4c\uff0c\u6bcf\u5468\u56db\u66f4\u65b0\",\n \"coverImg\": \"https://p3-luna.douyinpic.com/img/tos-cn-i-b829550vbb/d0d8d48461a62748e84689cdf049b19a.png~tplv-b829550vbb-resize:960:960.png\",\n \"title\": \"\u70ed\u6b4c\u699c\"\n }, {\n \"id\": \"7060812597884869927\",\n \"description\": \"\u8fd1\u671f\u53d1\u884c\u7684\u70ed\u5ea6\u6700\u9ad8\u768450\u9996\u65b0\u6b4c\uff0c\u6bcf\u5468\u56db\u66f4\u65b0\",\n \"coverImg\": \"https://p3-luna.douyinpic.com/img/tos-cn-i-b829550vbb/f12f7eb5b54d0899c7c724df009668a8.png~tplv-b829550vbb-resize:960:960.png\",\n \"title\": \"\u65b0\u6b4c\u699c\"\n }, {\n \"id\": \"7061475546400005410\",\n \"description\": \"\u6c7d\u6c34\u97f3\u4e50\u5185\u6bcf\u5468\u70ed\u5ea6\u6700\u9ad8\u768450\u9996\u5916\u6587\u6b4c\u66f2\uff0c\u6bcf\u5468\u56db\u66f4\u65b0\",\n \"coverImg\": \"https://p3-luna.douyinpic.com/img/tos-cn-i-b829550vbb/33747550ed5499b58feda42a21748637.png~tplv-b829550vbb-resize:960:960.png\",\n \"title\": \"\u6b27\u7f8e\u699c\"\n }, {\n \"id\": \"7415959718721494311\",\n \"description\": \"\u6296\u97f3\u97f3\u4e50\u4eba\u5f00\u653e\u5e73\u53f0\u4e0a\u4f20\u6b4c\u66f2\uff0c\u7efc\u5408\u6bcf\u5468\u7ad9\u5185\u70ed\u5ea6\u8fdb\u884c\u6392\u5e8f\u5c55\u793a\",\n \"coverImg\": \"https://p3-luna.douyinpic.com/img/tos-cn-v-2774c002/o8FQKiQQBxHWa2hzsBNAgYOX6iEHEAibADAbfB~tplv-b829550vbb-resize:960:960.png\",\n \"title\": \"\u97f3\u4e50\u4eba\u6b4c\u66f2\u699c\"\n }]\n }];\n}\n\n/**\n * \u83b7\u53d6\u6392\u884c\u699c\u8be6\u7ec6\u4fe1\u606f\n * @async\n * @param {Object} topListItem - \u6392\u884c\u699c\u5bf9\u8c61\n * @param {string} topListItem.id - \u6392\u884c\u699c ID\n * @param {number} [page=1] - \u9875\u7801\uff08\u672a\u4f7f\u7528\uff0c\u59cb\u7ec8\u8fd4\u56de\u5b8c\u6574\u699c\u5355\uff09\n * @returns {Promise} \u6392\u884c\u699c\u8be6\u7ec6\u4fe1\u606f\uff08\u5305\u542b\u97f3\u4e50\u5217\u8868\uff09\n *\n * @description\n * \u83b7\u53d6\u6307\u5b9a\u6392\u884c\u699c\u7684\u5b8c\u6574\u66f2\u76ee\u5217\u8868\n *\n * @example\n * const detail = await getTopListDetail({ id: \"7036274230471712007\" });\n * // Returns: { ...topListItem, musicList: [...] }\n */\nasync function getTopListDetail(topListItem, page = 1) {\n const response = await axios.default.get(`https://api5-lf.qishui.com/luna/charts/${topListItem.id}?charge=0`, {\n \"headers\": QISHUI_API_HEADERS\n });\n\n const apiData = response.data;\n\n return Object.assign(Object.assign({}, topListItem), {\n \"musicList\": apiData.chart.track_ranks.map(parseRankTrackItem)\n });\n}\n\n/**\n * \u5bfc\u5165\u97f3\u4e50\u6b4c\u5355\n * @async\n * @param {string} playlistUrl - \u6b4c\u5355\u5206\u4eab\u94fe\u63a5\u6216\u7eaf\u6570\u5b57 ID\n * @returns {Promise>} \u6b4c\u5355\u4e2d\u7684\u97f3\u4e50\u5217\u8868\n *\n * @description\n * \u652f\u6301\u4e24\u79cd\u683c\u5f0f\uff1a\n * 1. \u5b8c\u6574\u5206\u4eab\u94fe\u63a5\uff1ahttps://xxx.douyin.com/qishui/share/playlist?playlist_id=123456\n * 2. \u7eaf\u6570\u5b57 ID\uff1a123456\n *\n * @example\n * const musicList = await importMusicPlaylist(\"7036274230471712007\");\n * // Returns: [{ id, title, artist, ... }, ...]\n */\nasync function importMusicPlaylist(playlistUrl) {\n let playlistId;\n\n // \u5c1d\u8bd5\u4ece\u5b8c\u6574 URL \u4e2d\u63d0\u53d6 ID\n !playlistId && (playlistId = (playlistUrl.match(/https?:\\/\\/(.*?).douyin.com\\/qishui\\/share\\/playlist\\?playlist_id=([0-9]+)/) || [])[2]);\n\n // \u5c1d\u8bd5\u5339\u914d\u7eaf\u6570\u5b57 ID\n if (!playlistId) {\n playlistId = (playlistUrl.match(/^(\\d+)$/) || [])[1];\n }\n\n if (!playlistId) return;\n\n const playlistDetail = await fetchPlaylistDetail(playlistId);\n return playlistDetail.data.media_resources.map(parsePlaylistMediaResource);\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u7ec6\u4fe1\u606f\uff08\u5185\u90e8\u51fd\u6570\uff09\n * @async\n * @private\n * @param {string} playlistId - \u6b4c\u5355 ID\n * @returns {Promise} \u6b4c\u5355\u8be6\u7ec6\u6570\u636e\n *\n * @description\n * \u901a\u8fc7\u6c7d\u6c34\u97f3\u4e50 API \u83b7\u53d6\u6b4c\u5355\u5b8c\u6574\u4fe1\u606f\n *\n * @example\n * const detail = await fetchPlaylistDetail(\"7036274230471712007\");\n * // Returns: { data: { media_resources: [...] } }\n */\nasync function fetchPlaylistDetail(playlistId) {\n try {\n return await axios.default.post(\"https://api5-lq.qishui.com/luna/playlist/detail?charge=0\", {\n \"playlist_id\": playlistId\n }, {\n \"headers\": QISHUI_API_HEADERS\n });\n } catch (error) {\n return [];\n }\n}\n\n/**\n * \u83b7\u53d6\u827a\u672f\u5bb6\u4f5c\u54c1\u5217\u8868\n * @async\n * @param {Object} artist - \u827a\u672f\u5bb6\u5bf9\u8c61\n * @param {string} artist.id - \u827a\u672f\u5bb6 ID\n * @param {number} page - \u9875\u7801\uff08\u672a\u4f7f\u7528\uff0c\u59cb\u7ec8\u8fd4\u56de\u5168\u90e8\uff09\n * @param {number} limit - \u9650\u5236\u6570\u91cf\uff08\u672a\u4f7f\u7528\uff09\n * @returns {Promise} \u827a\u672f\u5bb6\u4f5c\u54c1\u6570\u636e\n * @returns {Array} return.data - \u97f3\u4e50\u5217\u8868\n *\n * @description\n * \u83b7\u53d6\u6307\u5b9a\u827a\u672f\u5bb6\u7684\u6240\u6709\u66f2\u76ee\uff08\u6700\u591a1000\u9996\uff09\n *\n * @example\n * const works = await getArtistWorks({ id: \"123456\" }, 1, 20);\n * // Returns: { data: [...] }\n */\nasync function getArtistWorks(artist, page, limit) {\n const response = await axios.default.get(`https://api5-lq.qishui.com/luna/artists/${artist.id}/tracks?count=1000&charge=0`, {\n \"headers\": QISHUI_API_HEADERS\n });\n\n const apiData = response.data;\n\n return {\n \"data\": apiData.tracks.map(parseTrackItem)\n };\n}\n\n/**\n * \u83b7\u53d6\u4e13\u8f91\u4fe1\u606f\n * @async\n * @param {Object} album - \u4e13\u8f91\u5bf9\u8c61\n * @param {string} album.id - \u4e13\u8f91 ID\n * @returns {Promise} \u4e13\u8f91\u8be6\u7ec6\u4fe1\u606f\n * @returns {Array} return.musicList - \u4e13\u8f91\u66f2\u76ee\u5217\u8868\n *\n * @description\n * \u83b7\u53d6\u6307\u5b9a\u4e13\u8f91\u7684\u6240\u6709\u66f2\u76ee\uff08\u6700\u591a1000\u9996\uff09\n *\n * @example\n * const albumInfo = await getAlbumInfo({ id: \"123456\" });\n * // Returns: { musicList: [...] }\n */\nasync function getAlbumInfo(album) {\n const response = await axios.default.get(`https://api5-lq.qishui.com/luna/albums/${album.id}?count=1000&charge=0`, {\n \"headers\": QISHUI_API_HEADERS\n });\n\n const apiData = response.data;\n\n return {\n \"musicList\": apiData.tracks.map(parseTrackItem)\n };\n}\n\n/**\n * \u83b7\u53d6\u63a8\u8350\u6b4c\u5355\u6807\u7b7e\n * @async\n * @returns {Promise} \u6807\u7b7e\u6570\u636e\n * @returns {Array} return.data - \u81ea\u5b9a\u4e49\u6807\u7b7e\uff08\u7a7a\uff09\n * @returns {Array} return.pinned - \u56fa\u5b9a\u6807\u7b7e\u5217\u8868\n *\n * @description\n * \u8fd4\u56de\u56fa\u5b9a\u7684\u6b4c\u5355\u5206\u7c7b\u6807\u7b7e\uff08\u6d41\u884c\u3001\u534e\u8bed\u3001\u6b27\u7f8e\u7b49\uff09\n *\n * @example\n * const tags = await getRecommendPlaylistTags();\n * // Returns: { data: [], pinned: [...] }\n */\nasync function getRecommendPlaylistTags() {\n return {\n \"data\": [],\n \"pinned\": [{\n \"id\": 0,\n \"title\": \"\u6bcf\u65e5\u63a8\u8350\"\n }, {\n \"id\": 14,\n \"title\": \"\u6d41\u884c\"\n }, {\n \"id\": 8,\n \"title\": \"\u534e\u8bed\"\n }, {\n \"id\": 9,\n \"title\": \"\u6b27\u7f8e\"\n }, {\n \"id\": 20,\n \"title\": \"\u56fd\u98ce\"\n }, {\n \"id\": 18,\n \"title\": \"\u6c11\u8c23\"\n }, {\n \"id\": 15,\n \"title\": \"\u6447\u6eda\"\n }, {\n \"id\": 38,\n \"title\": \"\u8bf4\u5531\"\n }, {\n \"id\": 16,\n \"title\": \"\u7535\u5b50\"\n }, {\n \"id\": 19,\n \"title\": \"R&B\"\n }, {\n \"id\": 69,\n \"title\": \"\u6cbb\u6108\"\n }, {\n \"id\": 45,\n \"title\": \"\u7761\u524d\"\n }, {\n \"id\": 40,\n \"title\": \"\u5b66\u4e60\"\n }]\n };\n}\n\n/**\n * \u6839\u636e\u6807\u7b7e\u83b7\u53d6\u63a8\u8350\u6b4c\u5355\n * @async\n * @param {Object} tag - \u6807\u7b7e\u5bf9\u8c61\n * @param {string|number} tag.id - \u6807\u7b7e ID\uff08\u5b50\u9891\u9053 ID\uff09\n * @param {number} page - \u9875\u7801\uff08\u672a\u4f7f\u7528\uff09\n * @returns {Promise} \u63a8\u8350\u6b4c\u5355\u5217\u8868\n * @returns {boolean} return.isEnd - \u662f\u5426\u5df2\u7ed3\u675f\n * @returns {Array} return.data - \u6b4c\u5355\u5217\u8868\n *\n * @description\n * \u6839\u636e\u5206\u7c7b\u6807\u7b7e\u83b7\u53d6\u63a8\u8350\u6b4c\u5355\uff08\u6d41\u884c\u3001\u534e\u8bed\u3001\u6b27\u7f8e\u7b49\uff09\n *\n * @example\n * const playlists = await getRecommendPlaylistsByTag({ id: 14 }, 1);\n * // Returns: { isEnd: false, data: [...] }\n */\nasync function getRecommendPlaylistsByTag(tag, page) {\n let subChannelId = Number.isNaN(parseInt(tag.id, 10)) ? 0 : parseInt(tag.id, 10);\n\n try {\n const response = await axios.default.post(\"https://api5-lq.qishui.com/luna/discover/mix?charge=0\", {\n \"block_type\": \"discover_playlist_mix\",\n \"feed_discover_extra\": {},\n \"latest_douyin_liked_playlist_show_ts\": 0,\n \"sub_channel_id\": subChannelId\n }, {\n \"headers\": QISHUI_API_HEADERS\n });\n\n return {\n \"isEnd\": false,\n \"data\": response.data.inner_block.map(parseRecommendPlaylistBlock)\n };\n } catch (error) {\n return {\n \"isEnd\": false,\n \"data\": []\n };\n }\n}\n\n/**\n * \u83b7\u53d6\u97f3\u4e50\u8bc4\u8bba\n * @async\n * @param {Object} musicItem - \u97f3\u4e50\u5bf9\u8c61\n * @param {string} musicItem.id - \u97f3\u4e50 ID\n * @param {number} [page=1] - \u9875\u7801\n * @returns {Promise} \u8bc4\u8bba\u6570\u636e\n * @returns {boolean} return.isEnd - \u662f\u5426\u5df2\u5230\u6700\u540e\u4e00\u9875\n * @returns {Array} return.data - \u8bc4\u8bba\u5217\u8868\n *\n * @description\n * \u5206\u9875\u83b7\u53d6\u6307\u5b9a\u97f3\u4e50\u7684\u7528\u6237\u8bc4\u8bba\n *\n * @example\n * const comments = await getMusicComments({ id: \"123456\" }, 1);\n * // Returns: { isEnd: false, data: [...] }\n */\nasync function getMusicComments(musicItem, page = 1) {\n const cursor = (page - 1) * PAGE_SIZE;\n const response = await axios.default.get(`https://api5-lq.qishui.com/luna/comments?group_id=${musicItem.id}&cursor=${cursor}&count=${PAGE_SIZE}&charge=0`, {\n \"headers\": QISHUI_API_HEADERS\n });\n\n const apiData = response.data;\n\n return {\n \"isEnd\": page * PAGE_SIZE > apiData.count ? true : false,\n \"data\": apiData.comments.map(parseCommentItem)\n };\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u5355\u4fe1\u606f\n * @async\n * @param {Object} playlist - \u6b4c\u5355\u5bf9\u8c61\n * @param {string} playlist.id - \u6b4c\u5355 ID\n * @returns {Promise} \u6b4c\u5355\u8be6\u7ec6\u4fe1\u606f\n * @returns {boolean} return.isEnd - \u59cb\u7ec8\u4e3a true\n * @returns {Array} return.musicList - \u6b4c\u5355\u66f2\u76ee\u5217\u8868\n *\n * @description\n * \u83b7\u53d6\u6307\u5b9a\u6b4c\u5355\u7684\u5b8c\u6574\u66f2\u76ee\u5217\u8868\n *\n * @example\n * const info = await getMusicPlaylistInfo({ id: \"123456\" });\n * // Returns: { isEnd: true, musicList: [...] }\n */\nasync function getMusicPlaylistInfo(playlist) {\n const playlistDetail = await fetchPlaylistDetail(playlist.id);\n\n return {\n \"isEnd\": true,\n \"musicList\": playlistDetail.data.media_resources.map(parsePlaylistMediaResource)\n };\n}\n\n// ============================================\n// \u63d2\u4ef6\u5bfc\u51fa\u914d\u7f6e\n// ============================================\n\nmodule.exports = {\n \"platform\": \"\u6c7d\u6c34\u97f3\u4e50\",\n \"version\": \"0.2.3\",\n \"author\": \"Toskysun&\u7b80\u4e91\",\n \"appVersion\": \">0.1.0-alpha.0\",\n \"srcUrl\": \"https://musicfree-plugins.netlify.app/plugins/qishui.js\",\n \"cacheControl\": \"no-cache\",\n // \u58f0\u660e\u63d2\u4ef6\u652f\u6301\u7684\u97f3\u8d28\u5217\u8868\n \"supportedQualities\": [\"128k\", \"320k\", \"flac\"],\n \"hints\": {\n \"importMusicSheet\": [\n \"\u6c7d\u6c34APP\uff1a\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u94fe\u63a5\uff1b\u624b\u52a8\u8bbf\u95ee\u94fe\u63a5\u540e\u518d\u590d\u5236\u94fe\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"\u7f51\u9875\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ]\n },\n \"supportedSearchType\": [\"music\"],\n\n /**\n * \u641c\u7d22\u529f\u80fd\n * @param {string} query - \u641c\u7d22\u5173\u952e\u8bcd\n * @param {number} page - \u9875\u7801\n * @param {string} type - \u641c\u7d22\u7c7b\u578b\uff08\u4ec5\u652f\u6301 \"music\"\uff09\n */\n async \"search\"(query, page, type) {\n if (type === \"music\") return await searchMusic(query, page);\n },\n\n \"getMusicInfo\": getMusicInfo,\n \"getLyric\": getMusicDetailInfo,\n \"getMediaSource\": getMusicPlaybackSource,\n \"getTopLists\": getTopLists,\n \"getTopListDetail\": getTopListDetail,\n \"importMusicSheet\": importMusicPlaylist,\n \"getArtistWorks\": getArtistWorks,\n \"getAlbumInfo\": getAlbumInfo,\n \"getRecommendSheetTags\": getRecommendPlaylistTags,\n \"getRecommendSheetsByTag\": getRecommendPlaylistsByTag,\n \"getMusicSheetInfo\": getMusicPlaylistInfo,\n \"getMusicComments\": getMusicComments\n};", "id": "msg_1789568448736"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 22:20:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 汽水qishui音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:20:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 22:20:48] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 5sing already exists, will overwrite [2026-09-16 22:20:48] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568448736: True [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 汽水qishui音乐 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹侣 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_笭鬼鬼 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹玥 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_笭鬼鬼 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩_Cookie [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩_Cookie: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 弥音QQ [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 弥音QQ: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗简云 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗简云: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 好听轻音乐 [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 好听轻音乐: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 5sing [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 5sing [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Q音 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin CCTV听音 already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Q音: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_猫 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_猫: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我音乐Thomas [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我音乐Thomas: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 开心汽水 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 开心汽水: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GD音乐台 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GD音乐台: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云音乐 (非VIP) [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: CCTV听音 [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 403 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for CCTV听音 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin GD音乐台 already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_竹侣 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_念心 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_念心: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云音乐 (酷我非VIP) [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云音乐 (酷我非VIP): Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力WY [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力WY: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云云音乐 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云云音乐: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云电台 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云电台: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KW [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: GD音乐台 [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KW: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗Thomas [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for GD音乐台 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin GitCode already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗Thomas: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸氢钠 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸氢钠: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗 [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_猫 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_猫: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: GitCode [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for GitCode [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Navidrome already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小蜗音乐 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小蜗音乐: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力QQ [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力QQ: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_念心 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_念心: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at BrotliDecompress.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_念心 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Navidrome [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_念心: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_猫 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Navidrome [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin QQ Vip already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_猫: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GitCode [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GitCode: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我JHMS [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我JHMS: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_竹玥 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ Vip [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at BrotliDecompress.emit (node:events:508:28) [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ Vip [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 落月QQ [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin QQ_念心 already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 落月QQ: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_竹玥 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ歌词 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ歌词: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 腾讯音乐 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 腾讯音乐: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 千千 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 千千: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ_念心 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 溯音网易 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ_念心 [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 溯音网易: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin QQ_猫 already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'status': 'loaded', 'load_time': 1789568439.5080366, 'enabled': True}, '元力KG': {'status': 'loaded', 'load_time': 1789568439.8100493, 'enabled': True}, '碳酸歌词': {'status': 'loaded', 'load_time': 1789568440.1111383, 'enabled': True}, '网易Ciallo~(∠・ω_ )⌒☆': {'status': 'loaded', 'load_time': 1789568440.7152228, 'enabled': True}, '猫耳FM': {'status': 'loaded', 'load_time': 1789568441.0165057, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789568441.317902, 'enabled': True}, '迟言QQ': {'status': 'loaded', 'load_time': 1789568441.6194928, 'enabled': True}, 'udio': {'status': 'loaded', 'load_time': 1789568441.920616, 'enabled': True}, '酷狗JHMS': {'status': 'loaded', 'load_time': 1789568442.2220206, 'enabled': True}, '种子': {'status': 'loaded', 'load_time': 1789568442.5232406, 'enabled': True}, '小枸音乐': {'status': 'loaded', 'load_time': 1789568442.824637, 'enabled': True}, '西瓜糖QQ': {'status': 'loaded', 'load_time': 1789568443.1261823, 'enabled': True}, '快手': {'status': 'loaded', 'load_time': 1789568443.4273539, 'enabled': True}, '酷我': {'status': 'loaded', 'load_time': 1789568443.7297451, 'enabled': True}, '酷狗_竹玥': {'status': 'loaded', 'load_time': 1789568444.0316675, 'enabled': True}, '爱听': {'status': 'loaded', 'load_time': 1789568444.3346422, 'enabled': True}, '酷我Fish': {'status': 'loaded', 'load_time': 1789568444.636163, 'enabled': True}, 'QQ音乐 (非VIP)': {'status': 'loaded', 'load_time': 1789568444.9385352, 'enabled': True}, '哔哩哔哩': {'status': 'loaded', 'load_time': 1789568447.127132, 'enabled': True}, '网易音乐': {'status': 'loaded', 'load_time': 1789568447.4293647, 'enabled': True}, '歌词千寻': {'status': 'loaded', 'load_time': 1789568447.7304537, 'enabled': True}, '网易bimiao': {'status': 'loaded', 'load_time': 1789568448.0321133, 'enabled': True}, '元力MG': {'status': 'loaded', 'load_time': 1789568448.4348705, 'enabled': True}, '歌曲宝': {'status': 'loaded', 'load_time': 1789568448.7360463, 'enabled': True}, '汽水qishui音乐': {'status': 'loaded', 'load_time': 1789568449.037856, 'enabled': True}} [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ_猫 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ_猫 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin QQ_竹玥 already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ_竹玥 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ_竹玥 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin QQ歌词 already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ歌词 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ歌词 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin QQ音乐 (非VIP) already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: QQ音乐 (非VIP) [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for QQ音乐 (非VIP) [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Q音 already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Q音 [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Q音 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin WebDAV already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: WebDAV [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for WebDAV [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin WebDav_lrc already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 书音FM [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 书音FM: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KG [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KG: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸歌词 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸歌词: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDav_lrc [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDav_lrc: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易Ciallo~(∠・ω_ )⌒☆: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 迟言QQ [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 迟言QQ: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: WebDav_lrc [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for WebDav_lrc [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin Youtube already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗JHMS [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗JHMS: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 种子 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 种子: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小枸音乐 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小枸音乐: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 西瓜糖QQ [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 西瓜糖QQ: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_竹玥 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 爱听 [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 爱听: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: Youtube [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我Fish [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for Youtube [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我Fish: Node.js process not available and restart failed [2026-09-16 22:20:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ音乐 (非VIP) [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin bilibili already exists, will overwrite [2026-09-16 22:20:49] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:49] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易专辑 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易专辑: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易bimiao [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易bimiao: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力MG [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力MG: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌曲宝 [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async $19a45cbfdc5a1d1d$var$searchMusic (evalmachine.:27:22) { [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌曲宝: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水qishui音乐 [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: bilibili [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for bilibili [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水qishui音乐: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin suno already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹侣 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_笭鬼鬼 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹玥 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_笭鬼鬼 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩_Cookie [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩_Cookie: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 弥音QQ [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: suno [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for suno [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 弥音QQ: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin udio already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗简云 [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗简云: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 好听轻音乐 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 好听轻音乐: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Q音 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Q音: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: udio [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for udio [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 书音FM already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_猫 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_猫: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我音乐Thomas [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我音乐Thomas: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_REQUEST', [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 开心汽水 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 开心汽水: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GD音乐台 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GD音乐台: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云音乐 (非VIP) [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 书音FM [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 书音FM [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_竹侣 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 云云音乐 already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_念心 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_念心: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云音乐 (酷我非VIP) [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云音乐 (酷我非VIP): Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力WY [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力WY: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云云音乐 [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云云音乐: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云电台 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云电台: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KW [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KW: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗Thomas [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗Thomas: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 云云音乐 [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸氢钠 [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 云云音乐 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 云音乐 (酷我非VIP) already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸氢钠: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_猫 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_猫: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小蜗音乐 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小蜗音乐: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力QQ [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力QQ: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_念心 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_念心: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_念心 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_念心: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_猫 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 云音乐 (酷我非VIP) [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_猫: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 云音乐 (酷我非VIP) [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 元力KG already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GitCode [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GitCode: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我JHMS [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我JHMS: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_竹玥 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 落月QQ [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 落月QQ: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_竹玥 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ歌词 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力KG [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ歌词: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力KG [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 元力KW already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 腾讯音乐 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 腾讯音乐: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 千千 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 千千: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 溯音网易 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 溯音网易: Node.js process not available and restart failed [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力KW [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力KW [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 元力MG already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力MG [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力MG [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 元力QQ already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力QQ [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力QQ [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 元力WY already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 元力WY [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 元力WY [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 千千 already exists, will overwrite [2026-09-16 22:20:50] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 千千 [2026-09-16 22:20:50] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 千千 [2026-09-16 22:20:50] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 哔哩哔哩 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 哔哩哔哩 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 哔哩哔哩 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 哔哩哔哩_Cookie already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 哔哩哔哩_Cookie [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 哔哩哔哩_Cookie [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 喜马拉雅_竹侣 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 喜马拉雅_竹侣 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 喜马拉雅_竹侣 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 喜马拉雅_笭鬼鬼 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 喜马拉雅_笭鬼鬼 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 喜马拉雅_笭鬼鬼 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 好听轻音乐 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 好听轻音乐 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 好听轻音乐 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 小枸音乐 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 小枸音乐 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 小枸音乐 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 小蜗音乐 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 小蜗音乐 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 小蜗音乐 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 开心汽水 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 开心汽水 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 开心汽水 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 弥音QQ already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 弥音QQ [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 弥音QQ [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 歌曲宝 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌曲宝 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌曲宝 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 歌词千寻 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 歌词千寻 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 歌词千寻 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 汽水qishui音乐 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 汽水qishui音乐 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 汽水qishui音乐 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 汽水vip already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 汽水vip [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 汽水vip [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 溯音网易 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 溯音网易 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 溯音网易 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 爱听 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 爱听 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 爱听 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 猫耳FM already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 猫耳FM [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 猫耳FM [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 碳酸歌词 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 碳酸歌词 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 碳酸歌词 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 碳酸氢钠 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 碳酸氢钠 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 碳酸氢钠 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 种子 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 种子 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 种子 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易Ciallo~(∠・ω_ )⌒☆ already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易_念心 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_念心 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_念心 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易_猫 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_猫 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_猫 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易_竹玥 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_竹玥 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_竹玥 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易_笭鬼鬼 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易_笭鬼鬼 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易_笭鬼鬼 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易bimiao already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易bimiao [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易bimiao [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易专辑 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易专辑 [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易专辑 [2026-09-16 22:20:51] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易云 already exists, will overwrite [2026-09-16 22:20:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 22:20:51] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易云 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易云 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易云电台 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易云电台 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易云电台 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易云音乐 (非VIP) already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易云音乐 (非VIP) [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易云音乐 (非VIP) [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 网易音乐 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 网易音乐 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 网易音乐 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 腾讯音乐 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 腾讯音乐 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 腾讯音乐 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 落月QQ already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 落月QQ [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 落月QQ [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 西瓜糖QQ already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 西瓜糖QQ [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 西瓜糖QQ [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 迟言QQ already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 迟言QQ [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 迟言QQ [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我Fish already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我Fish [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我Fish [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我JHMS already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我JHMS [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我JHMS [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我_念心 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_念心 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_念心 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我_猫 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_猫 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_猫 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我_竹侣 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_竹侣 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_竹侣 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我_竹玥 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我_竹玥 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我_竹玥 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷我音乐Thomas already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷我音乐Thomas [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷我音乐Thomas [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷狗 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷狗JHMS already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗JHMS [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗JHMS [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷狗Thomas already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗Thomas [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗Thomas [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷狗_念心 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗_念心 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗_念心 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷狗_竹玥 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗_竹玥 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗_竹玥 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 酷狗简云 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 酷狗简云 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 酷狗简云 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:774: Plugin 闻音酷我 already exists, will overwrite [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:791: Successfully downloaded and saved plugin: 闻音酷我 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2776: Plugin config updated for 闻音酷我 [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 书音FM [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 书音FM: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KG [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KG: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸歌词 [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸歌词: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDav_lrc [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDav_lrc: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易Ciallo~(∠・ω_ )⌒☆: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 迟言QQ [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 迟言QQ: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 22:20:52] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗JHMS [2026-09-16 22:20:52] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:52] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗JHMS: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 种子 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 种子: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小枸音乐 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小枸音乐: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 西瓜糖QQ [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 西瓜糖QQ: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_竹玥 [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 爱听 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 爱听: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我Fish [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我Fish: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ音乐 (非VIP) [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易专辑 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易专辑: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易bimiao [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易bimiao: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力MG [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力MG: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌曲宝 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌曲宝: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水qishui音乐 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水qishui音乐: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹侣 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_笭鬼鬼 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹玥 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_笭鬼鬼 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩_Cookie [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩_Cookie: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 弥音QQ [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'User-Agent': 'axios/1.17.0', [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 弥音QQ: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗简云 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗简云: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 好听轻音乐 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 好听轻音乐: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Q音 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Q音: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_猫 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_猫: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我音乐Thomas [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我音乐Thomas: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 开心汽水 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 开心汽水: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GD音乐台 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GD音乐台: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云音乐 (非VIP) [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_竹侣 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_念心 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_念心: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云音乐 (酷我非VIP) [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云音乐 (酷我非VIP): Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力WY [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力WY: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云云音乐 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云云音乐: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云电台 [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云电台: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KW [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KW: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗Thomas [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗Thomas: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸氢钠 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸氢钠: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_猫 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_猫: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小蜗音乐 [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小蜗音乐: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力QQ [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力QQ: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_念心 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_念心: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_念心 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_念心: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_猫 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_猫: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GitCode [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GitCode: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我JHMS [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我JHMS: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://www.gequbao.com/s/%E6%98%8E%E5%A4%A9%E4%BC%9A%E6%9B%B4%E5%A5%BD', [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_竹玥 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 落月QQ [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 落月QQ: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_竹玥 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ歌词 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ歌词: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 腾讯音乐 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 腾讯音乐: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 千千 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 千千: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 溯音网易 [2026-09-16 22:20:53] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 溯音网易: Node.js process not available and restart failed [2026-09-16 22:20:53] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 22:20:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 书音FM [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 书音FM: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KG [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KG: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸歌词 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸歌词: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDav_lrc [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDav_lrc: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易Ciallo~(∠・ω_ )⌒☆: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 猫耳FM: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Audiomack: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 迟言QQ [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 迟言QQ: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin udio: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗JHMS [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗JHMS: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 种子 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 种子: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小枸音乐 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小枸音乐: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 西瓜糖QQ [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 西瓜糖QQ: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 快手: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_竹玥 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 爱听 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 爱听: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我Fish [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我Fish: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ音乐 (非VIP) [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易专辑 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易专辑: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易bimiao [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易bimiao: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力MG [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力MG: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌曲宝 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌曲宝: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水qishui音乐 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水qishui音乐: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹侣 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_笭鬼鬼 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹玥 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_笭鬼鬼 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩_Cookie [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩_Cookie: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 弥音QQ [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 弥音QQ: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗简云 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗简云: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 好听轻音乐 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 好听轻音乐: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Q音 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Q音: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_猫 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_猫: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我音乐Thomas [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我音乐Thomas: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 开心汽水 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 开心汽水: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GD音乐台 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GD音乐台: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云音乐 (非VIP) [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_竹侣 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_竹侣: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_念心 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_念心: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云音乐 (酷我非VIP) [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云音乐 (酷我非VIP): Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力WY [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力WY: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云云音乐 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云云音乐: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云电台 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云电台: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KW [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KW: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗Thomas [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗Thomas: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸氢钠 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸氢钠: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_猫 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_猫: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小蜗音乐 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小蜗音乐: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力QQ [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力QQ: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_念心 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_念心: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_念心 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_念心: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_猫 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_猫: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GitCode [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GitCode: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我JHMS [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我JHMS: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_竹玥 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 落月QQ [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 落月QQ: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_竹玥 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_竹玥: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ歌词 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ歌词: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 腾讯音乐 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 腾讯音乐: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 千千 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 千千: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 溯音网易 [2026-09-16 22:20:54] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 溯音网易: Node.js process not available and restart failed [2026-09-16 22:20:54] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{} [2026-09-16 22:20:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 22:20:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 22:20:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /s/%E6%98%8E%E5%A4%A9%E4%BC%9A%E6%9B%B4%E5%A5%BD HTTP/1.1\r\n' + [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'User-Agent: axios/1.17.0\r\n' + [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Host: www.gequbao.com\r\n' + [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _keepAliveTimeout: 0, [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onPendingData: [Function: nop], [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: Agent { [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function (anonymous)], [2026-09-16 22:20:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: maybeEnableKeylog] [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype] { [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 22:20:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] {}, [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype] {}, [2026-09-16 22:21:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAliveMsecs: 1000, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxSockets: Infinity, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxFreeSockets: 256, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxTotalSockets: Infinity, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: totalSocketCount: 0, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentKeepAliveTimeoutBuffer: 1000, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxCachedSessions: 100, [2026-09-16 22:21:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sessionCache: { [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: map: { [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'www.gequbao.com:443:::::::::::::::::::::': Buffer(1249) [Uint8Array] [ [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 48, 130, 4, 221, 2, 1, 1, 2, 2, 3, 4, 4, [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 2, 19, 2, 4, 32, 14, 132, 67, 46, 152, 1, 233, [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 197, 26, 120, 14, 38, 122, 212, 28, 221, 255, 128, 94, [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 162, 185, 2, 172, 152, 189, 122, 181, 246, 0, 112, 91, [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 127, 4, 48, 201, 83, 120, 225, 19, 114, 151, 112, 199, [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 56, 96, 225, 0, 69, 162, 220, 183, 82, 241, 173, 172, [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 117, 56, 62, 243, 161, 117, 33, 242, 150, 190, 26, 148, [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 237, 26, 146, 100, 78, 144, 51, 207, 110, 68, 142, 161, [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 12, 222, 252, 161, [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ... 1149 more items [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: list: [ 'www.gequbao.com:443:::::::::::::::::::::' ] [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): false, [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false [2026-09-16 22:21:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socketPath: undefined, [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'GET', [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxHeaderSize: undefined, [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: insecureHTTPParser: false, [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: joinDuplicateHeaders: undefined, [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: '/s/%E6%98%8E%E5%A4%A9%E4%BC%9A%E6%9B%B4%E5%A5%BD', [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _ended: true, [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: res: IncomingMessage { [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: { [2026-09-16 22:21:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: [ [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function (anonymous)], [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onclose], [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onclose] [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [ [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onerror], [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onError], [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onerror] [2026-09-16 22:21:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined, [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [ [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: responseOnEnd], [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onend], [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onend] [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: readable: undefined, [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [ [Function: onfinish], [Function: onfinish] ] [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: buffer: [], [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferIndex: 0, [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipes: [], [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: awaitDrainWriters: null, [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 110626684 [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: TLSSocket { [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: { [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: undefined, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipe: false, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureContext: SecureContext { context: SecureContext {} }, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isServer: false, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requestCert: true, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: rejectUnauthorized: true, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: session: undefined, [2026-09-16 22:21:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ALPNProtocols: undefined, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requestOCSP: undefined, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: enableTrace: undefined, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pskCallback: undefined, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: undefined, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: onread: undefined, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: signal: undefined [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 22:21:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'www.gequbao.com', [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 22:21:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: close: [ [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onSocketCloseDestroySSL], [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: onClose], [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: socketCloseListener] [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: end: [Function: onReadableStreamEnd], [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [ [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: socketErrorListener], [2026-09-16 22:21:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [Function: handleSocketError] [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ], [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: keylogNewListener], [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: undefined, [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secure: [Function: onConnectSecure], [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: session: [Function (anonymous)], [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function: onFree], [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [ [Function: onTimeout], [Function (anonymous)] ], [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agentRemove: [Function: onRemove], [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined, [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: drain: undefined, [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: undefined [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'www.gequbao.com', [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 22:21:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: ReadableState { [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: highWaterMark: 65536, [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: buffer: [], [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: bufferIndex: 0, [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: length: 0, [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: pipes: [], [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: awaitDrainWriters: null, [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kState): 60295028 [2026-09-16 22:21:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 22:21:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:35] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:35] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:45] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:21:45] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:21:45] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:21:45] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 书音FM [2026-09-16 22:21:45] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:21:45] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 22:21:45] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 22:21:46] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u4e66\u97f3FM", "code": "var $1Qt5Z$axios = require(\"axios\");\nvar $1Qt5Z$cheerio = require(\"cheerio\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"host\", () => $71db8672df30ab6c$export$5e032988b71f6158);\n$parcel$export(module.exports, \"headers\", () => $71db8672df30ab6c$export$838e2a576d4d6ff6);\n$parcel$export(module.exports, \"formatAlbumFromHtml\", () => $71db8672df30ab6c$export$ca076635ed710b0d);\n$parcel$export(module.exports, \"search\", () => $71db8672df30ab6c$export$d76128d007d19019);\n$parcel$export(module.exports, \"default\", () => $71db8672df30ab6c$export$2e2bcd8739ae039);\n\n\nconst $71db8672df30ab6c$export$5e032988b71f6158 = \"https://www.shuyinfm.com\";\nconst $71db8672df30ab6c$export$838e2a576d4d6ff6 = {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.69\"\n};\nasync function $71db8672df30ab6c$var$getRecommendSheetTags() {\n try {\n var result = {};\n var datas = [];\n var pinned = [];\n datas.push({\n data: [\n {\n id: \"1\",\n title: \"\u8a00\u60c5\"\n },\n {\n id: \"2\",\n title: \"\u7384\u5e7b\"\n },\n {\n id: \"5\",\n title: \"\u6050\u6016\"\n },\n {\n id: \"7\",\n title: \"\u7a7f\u8d8a\"\n },\n {\n id: \"8\",\n title: \"\u90fd\u5e02\"\n },\n {\n id: \"16\",\n title: \"\u5386\u53f2\"\n },\n {\n id: \"33\",\n title: \"\u60ac\u7591\"\n },\n {\n id: \"36\",\n title: \"\u7a7f\u8d8a\"\n },\n {\n id: \"38\",\n title: \"\u6587\u5b66\"\n },\n {\n id: \"39\",\n title: \"\u63a8\u7406\"\n },\n {\n id: \"40\",\n title: \"\u519b\u4e8b\"\n },\n {\n id: \"41\",\n title: \"\u804c\u573a\u8a00\u60c5\"\n },\n {\n id: \"56\",\n title: \"\u53cd\u8150\"\n },\n {\n id: \"58\",\n title: \"\u4eba\u7269\"\n },\n {\n id: \"60\",\n title: \"\u4fee\u771f\"\n },\n {\n id: \"63\",\n title: \"\u7f51\u6e38\"\n },\n {\n id: \"92\",\n title: \"\u6b66\u4fa0\"\n }\n ],\n title: \"\u6709\u58f0\u5c0f\u8bf4\"\n });\n pinned = [].concat(datas[0].data);\n datas.push({\n data: [\n {\n id: \"10\",\n title: \"\u803d\u7f8e\u5267\"\n },\n {\n id: \"12\",\n title: \"\u7231\u60c5\u5267\"\n },\n {\n id: \"51\",\n title: \"\u53e4\u98ce\u5267\"\n },\n {\n id: \"54\",\n title: \"\u73b0\u4ee3\u5267\"\n }\n ],\n title: \"\u5e7f\u64ad\u5267\"\n });\n datas.push({\n data: [\n {\n id: \"42\",\n title: \"\u5355\u7530\u82b3\"\n },\n {\n id: \"43\",\n title: \"\u5218\u5170\u82b3\"\n },\n {\n id: \"44\",\n title: \"\u7530\u8fde\u5143\"\n },\n {\n id: \"45\",\n title: \"\u8881\u9614\u6210\"\n },\n {\n id: \"46\",\n title: \"\u8fde\u4e3d\u5982\"\n },\n {\n id: \"47\",\n title: \"\u5f20\u5c11\u4f50\"\n },\n {\n id: \"48\",\n title: \"\u7530\u6218\u4e49\"\n },\n {\n id: \"49\",\n title: \"\u5b59\u4e00\"\n },\n {\n id: \"50\",\n title: \"\u5176\u4ed6\"\n },\n {\n id: \"53\",\n title: \"\u8881\u7530\"\n },\n {\n id: \"55\",\n title: \"\u738b\u73a5\u6ce2\"\n },\n {\n id: \"57\",\n title: \"\u90ed\u5fb7\u7eb2\"\n },\n {\n id: \"62\",\n title: \"\u5173\u52c7\u8d85\"\n },\n {\n id: \"65\",\n title: \"\u738b\u4f20\u6797\"\n }\n ],\n title: \"\u8bc4\u4e66\"\n });\n datas.push({\n data: [\n {\n id: \"67\",\n title: \"\u8d44\u8baf\"\n },\n {\n id: \"68\",\n title: \"\u77ed\u5267\"\n },\n {\n id: \"69\",\n title: \"\u5a31\u4e50\"\n },\n {\n id: \"70\",\n title: \"\u97f3\u4e50\"\n },\n {\n id: \"71\",\n title: \"\u60c5\u611f\"\n },\n {\n id: \"72\",\n title: \"\u641e\u7b11\"\n },\n {\n id: \"73\",\n title: \"\u76f8\u58f0\u5c0f\u54c1\"\n },\n {\n id: \"74\",\n title: \"\u6c7d\u8f66\"\n },\n {\n id: \"75\",\n title: \"\u516c\u5f00\u8bfe\"\n },\n {\n id: \"76\",\n title: \"\u751f\u6d3b\"\n },\n {\n id: \"77\",\n title: \"\u65c5\u6e38\"\n }\n ],\n title: \"\u8f66\u8f7d\"\n });\n datas.push({\n data: [\n {\n id: \"31\",\n title: \"\u767e\u5bb6\u8bb2\u575b\"\n },\n {\n id: \"35\",\n title: \"\u5a31\u4e50\"\n },\n {\n id: \"59\",\n title: \"\u7ca4\u8bed\"\n },\n {\n id: \"98\",\n title: \"\u97f3\u4e50\"\n },\n {\n id: \"99\",\n title: \"\u53e4\u98ce\"\n }\n ],\n title: \"\u5176\u5b83\"\n });\n /*const html = (await axios.get(host, {headers: headers})).data\n const $ = cheerio.load(html);\n var tagList = $(\"ul.layui-nav\").find(\"li\");\n for (let i = 0; i < tagList.length; i++) {\n const name = $(tagList[i]).find(\"a\").text();\n const href = $(tagList[i]).find(\"a\").attr(\"href\");\n if (href == \"/\") continue\n var temp = {} as IMusic.IMusicSheetGroupItem;\n temp.title = name;\n temp.data = [];\n if (href.match(/\\/\\w+\\//)) {\n const group = (await axios.get(host + href, {headers: headers})).data\n const group$ = cheerio.load(group);\n var secondTagList = group$(\"dd.clearfix\").find(\"a\")\n for (let j = 0; j < secondTagList.length; i++) {\n var itemSecond = {\n id: $(secondTagList[j]).attr(\"href\"),\n title: $(secondTagList[j]).text(),\n } as IMusic.IMusicSheetItem\n temp.data.push(itemSecond)\n if (name === \"\u6709\u58f0\u5c0f\u8bf4\") {\n pinned.push(itemSecond)\n }\n }\n } else {\n temp.data = [{\n id: href,\n title: name\n } as IMusic.IMusicSheetItem]\n }\n datas.push(temp);\n }*/ result.data = datas;\n result.pinned = pinned;\n return result;\n } catch (e) {}\n return {};\n}\nasync function $71db8672df30ab6c$var$getRecommendSheetsByTag(tag, page) {\n try {\n var result = {};\n var sheets = [];\n var id = tag.id;\n if (id == \"\") id = \"1\";\n var searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + \"/listinfo-\" + id + \"-\" + (page - 1) + \".html\";\n const html = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(searchUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6,\n timeout: 5000\n })).data;\n sheets = $71db8672df30ab6c$export$ca076635ed710b0d(html);\n result.data = sheets;\n result.isEnd = sheets.length > 0 && sheets.length < 24;\n return result;\n } catch (e) {}\n return {};\n}\nasync function $71db8672df30ab6c$var$getMusicSheetInfo(albumItem, page) {\n var result = {\n sheetItem: {},\n musicList: []\n };\n let ret = await $71db8672df30ab6c$var$getAlbumInfo(albumItem, page);\n result.sheetItem = ret.albumItem;\n result.musicList = ret.musicList;\n return result;\n}\nasync function $71db8672df30ab6c$var$getAlbumInfo(albumItem, page) {\n var result = {\n albumItem: {\n ...albumItem\n },\n musicList: []\n };\n var searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + albumItem.id;\n let searchRes = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(searchUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n const $ = $1Qt5Z$cheerio.load(searchRes);\n result.albumItem.description = $(\"#book_intro\").find(\"dd\").text();\n const artist = $(\"p.sub-tags\").find(\"a\").text();\n const fansList = $(\"#fansinfo\").find(\"li\");\n for(let i = 0; i < fansList.length; i++){\n const title = $(fansList[i]).find(\"a\").text();\n const href = $(fansList[i]).find(\"a\").attr(\"href\");\n result.musicList.push({\n id: href,\n title: title,\n artist: artist\n });\n }\n return result;\n}\nasync function $71db8672df30ab6c$var$getMediaSource(musicItem, quality) {\n const searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + musicItem.id;\n const html = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(searchUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n const $ = $1Qt5Z$cheerio.load(html);\n const code = $(\"#jp-lines\").find(\"li\").eq(0).attr(\"data-code\");\n const path = html.match(/url : '(.*?)'/)[1];\n const tempUrl = $71db8672df30ab6c$export$5e032988b71f6158 + path + code;\n const res = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(tempUrl, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n try {\n const res2 = await (0, ($parcel$interopDefault($1Qt5Z$axios))).get(res.url, {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n });\n return {\n url: res2.request.responseURL\n };\n } catch (e) {\n return {\n url: e.request.responseURL\n };\n }\n return {\n url: \"\"\n };\n}\nasync function $71db8672df30ab6c$export$d76128d007d19019(query, page, type) {\n if (type === \"album\") return $71db8672df30ab6c$var$searchAlbum(query, page);\n else if (type === \"sheet\") return $71db8672df30ab6c$var$searchAlbum(query, page);\n}\nasync function $71db8672df30ab6c$var$searchAlbum(query, page) {\n try {\n let keyword = encodeURIComponent(query);\n var searchUrl = $71db8672df30ab6c$export$5e032988b71f6158 + \"/e/search/index.php\";\n const html = (await (0, ($parcel$interopDefault($1Qt5Z$axios))).post(searchUrl, \"keyboard=\" + keyword + \"&show=\" + encodeURIComponent(\"title,newstext,player,playadmin,movietime,filetype\"), {\n headers: $71db8672df30ab6c$export$838e2a576d4d6ff6\n })).data;\n const sheets = $71db8672df30ab6c$export$ca076635ed710b0d(html);\n return {\n isEnd: true,\n data: sheets\n };\n } catch (e) {}\n return {\n isEnd: true,\n data: []\n };\n}\nfunction $71db8672df30ab6c$export$ca076635ed710b0d(html) {\n var sheets = [];\n const $ = $1Qt5Z$cheerio.load(html);\n const albumList = $(\"ul.qm-pic-txt\").find(\"li\");\n for(let i = 0; i < albumList.length; i++){\n const id = $(albumList[i]).find(\".txt a\").attr(\"href\");\n const title = $(albumList[i]).find(\".txt a\").text();\n const artwork = $(albumList[i]).find(\".pic a img\").attr(\"src\");\n sheets.push({\n id: id,\n title: title,\n artwork: artwork\n });\n }\n return sheets;\n}\nconst $71db8672df30ab6c$var$pluginInstance = {\n platform: \"\u4e66\u97f3FM\",\n version: \"0.3.6\",\n author: \"SoEasy\u540c\u5b66\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/shuyinfm.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\n \"album\",\n \"sheet\"\n ],\n search: $71db8672df30ab6c$export$d76128d007d19019,\n getAlbumInfo: $71db8672df30ab6c$var$getAlbumInfo,\n getMusicSheetInfo: $71db8672df30ab6c$var$getMusicSheetInfo,\n getMediaSource: $71db8672df30ab6c$var$getMediaSource,\n getRecommendSheetTags: $71db8672df30ab6c$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $71db8672df30ab6c$var$getRecommendSheetsByTag\n};\nvar /*getRecommendSheetTags().then((res) => {\n console.log(res)\n getRecommendSheetsByTag(res.pinned[0], 1).then((res) => {\n console.log(res)\n getAlbumInfo(res.data[1], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n })\n })\n})*/ /*search(\"\u4e0e\u864e\u8c0b\u5a5a\", 1, \"album\").then((res) => {\n console.log(res)\n getMusicSheetInfo(res.data[0], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n })\n})*/ $71db8672df30ab6c$export$2e2bcd8739ae039 = $71db8672df30ab6c$var$pluginInstance;\n\n\n//# sourceMappingURL=shuyinfm.js.map", "id": "msg_1789568506558"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:46] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 书音FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568506558: True [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 书音FM [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KG [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5143\u529bKG", "code": "var _0xodt='jsjiami.com.v7';'use strict';function _0x4c5c(_0x35ae5b,_0x272ded){const _0x405aff=_0x405a();return _0x4c5c=function(_0x4c5c1,_0x52185e){_0x4c5c1=_0x4c5c1-0xff;let _0xb77ed9=_0x405aff[_0x4c5c1];if(_0x4c5c['iXwkMI']===undefined){var _0x278508=function(_0xc2e857){const _0x125938='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x113517='',_0x44a07e='';for(let _0x345730=0x0,_0xf2f84a,_0x28ed1d,_0x2dd6c5=0x0;_0x28ed1d=_0xc2e857['charAt'](_0x2dd6c5++);~_0x28ed1d&&(_0xf2f84a=_0x345730%0x4?_0xf2f84a*0x40+_0x28ed1d:_0x28ed1d,_0x345730++%0x4)?_0x113517+=String['fromCharCode'](0xff&_0xf2f84a>>(-0x2*_0x345730&0x6)):0x0){_0x28ed1d=_0x125938['indexOf'](_0x28ed1d);}for(let _0x1befb0=0x0,_0x2de6ee=_0x113517['length'];_0x1befb0<_0x2de6ee;_0x1befb0++){_0x44a07e+='%'+('00'+_0x113517['charCodeAt'](_0x1befb0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x44a07e);};const _0x46f5e4=function(_0x5420a4,_0x5e2bb8){let _0x1df875=[],_0x180af1=0x0,_0x517459,_0x503878='';_0x5420a4=_0x278508(_0x5420a4);let _0x1c0db9;for(_0x1c0db9=0x0;_0x1c0db9<0x100;_0x1c0db9++){_0x1df875[_0x1c0db9]=_0x1c0db9;}for(_0x1c0db9=0x0;_0x1c0db9<0x100;_0x1c0db9++){_0x180af1=(_0x180af1+_0x1df875[_0x1c0db9]+_0x5e2bb8['charCodeAt'](_0x1c0db9%_0x5e2bb8['length']))%0x100,_0x517459=_0x1df875[_0x1c0db9],_0x1df875[_0x1c0db9]=_0x1df875[_0x180af1],_0x1df875[_0x180af1]=_0x517459;}_0x1c0db9=0x0,_0x180af1=0x0;for(let _0xc17872=0x0;_0xc17872<_0x5420a4['length'];_0xc17872++){_0x1c0db9=(_0x1c0db9+0x1)%0x100,_0x180af1=(_0x180af1+_0x1df875[_0x1c0db9])%0x100,_0x517459=_0x1df875[_0x1c0db9],_0x1df875[_0x1c0db9]=_0x1df875[_0x180af1],_0x1df875[_0x180af1]=_0x517459,_0x503878+=String['fromCharCode'](_0x5420a4['charCodeAt'](_0xc17872)^_0x1df875[(_0x1df875[_0x1c0db9]+_0x1df875[_0x180af1])%0x100]);}return _0x503878;};_0x4c5c['DbASML']=_0x46f5e4,_0x35ae5b=arguments,_0x4c5c['iXwkMI']=!![];}const _0x92732d=_0x405aff[0x0],_0x3d6294=_0x4c5c1+_0x92732d,_0x277cea=_0x35ae5b[_0x3d6294];return!_0x277cea?(_0x4c5c['MXYpJC']===undefined&&(_0x4c5c['MXYpJC']=!![]),_0xb77ed9=_0x4c5c['DbASML'](_0xb77ed9,_0x52185e),_0x35ae5b[_0x3d6294]=_0xb77ed9):_0xb77ed9=_0x277cea,_0xb77ed9;},_0x4c5c(_0x35ae5b,_0x272ded);}const _0x202c5b=_0x4c5c;(function(_0x418052,_0x15b9dc,_0x1dc1d9,_0x582008,_0x2b2161,_0x1c5381,_0x37c5fd){return _0x418052=_0x418052>>0x9,_0x1c5381='hs',_0x37c5fd='hs',function(_0xe17a37,_0x5f240d,_0x556627,_0x1d7270,_0xe55cf6){const _0x255666=_0x4c5c;_0x1d7270='tfi',_0x1c5381=_0x1d7270+_0x1c5381,_0xe55cf6='up',_0x37c5fd+=_0xe55cf6,_0x1c5381=_0x556627(_0x1c5381),_0x37c5fd=_0x556627(_0x37c5fd),_0x556627=0x0;const _0x5e9186=_0xe17a37();while(!![]&&--_0x582008+_0x5f240d){try{_0x1d7270=-parseInt(_0x255666(0x167,'cCSu'))/0x1+parseInt(_0x255666(0x270,'2$Dj'))/0x2+-parseInt(_0x255666(0x230,'OaSf'))/0x3+parseInt(_0x255666(0x14f,'S7N@'))/0x4*(-parseInt(_0x255666(0x1e1,'^!ZC'))/0x5)+parseInt(_0x255666(0x106,'RWq!'))/0x6*(-parseInt(_0x255666(0x189,'!hM*'))/0x7)+parseInt(_0x255666(0x124,'FrC3'))/0x8+parseInt(_0x255666(0x24d,'d0va'))/0x9*(parseInt(_0x255666(0x26d,'cCSu'))/0xa);}catch(_0x1d6b96){_0x1d7270=_0x556627;}finally{_0xe55cf6=_0x5e9186[_0x1c5381]();if(_0x418052<=_0x582008)_0x556627?_0x2b2161?_0x1d7270=_0xe55cf6:_0x2b2161=_0xe55cf6:_0x556627=_0xe55cf6;else{if(_0x556627==_0x2b2161['replace'](/[FGxXtfpdOLHwDQykqJYC=]/g,'')){if(_0x1d7270===_0x5f240d){_0x5e9186['un'+_0x1c5381](_0xe55cf6);break;}_0x5e9186[_0x37c5fd](_0xe55cf6);}}}}}(_0x1dc1d9,_0x15b9dc,function(_0x5422f8,_0x319955,_0x4c8148,_0x50e861,_0x17b90e,_0x21ddec,_0xcbce49){return _0x319955='\\x73\\x70\\x6c\\x69\\x74',_0x5422f8=arguments[0x0],_0x5422f8=_0x5422f8[_0x319955](''),_0x4c8148='\\x72\\x65\\x76\\x65\\x72\\x73\\x65',_0x5422f8=_0x5422f8[_0x4c8148]('\\x76'),_0x50e861='\\x6a\\x6f\\x69\\x6e',(0x1c839b,_0x5422f8[_0x50e861](''));});}(0x18c00,0x2f414,_0x405a,0xc8),_0x405a)&&(_0xodt=0x1662);Object[_0x202c5b(0x1a9,'uM&7')](exports,'__esModule',{'value':!![]});const axios_1=require(_0x202c5b(0x204,'kZE5')),cheerio_1=require(_0x202c5b(0x143,'(zvE')),CryptoJs=require(_0x202c5b(0x22a,'7Vt6')),he=require('he'),pageSize=0x14;function formatMusicItem(_0x5002c8){const _0x5ec221=_0x202c5b,_0x15b046={'texbN':function(_0x488407,_0x5e92fa){return _0x488407!==_0x5e92fa;},'BsEpt':function(_0x2d6cd4,_0x40e612){return _0x2d6cd4!==_0x40e612;},'cxnLT':function(_0x342dbf,_0x26a240){return _0x342dbf!==_0x26a240;},'hTNJE':'{size}','YQsIF':'1080','ukAAr':function(_0x51466f,_0x341df4){return _0x51466f!==_0x341df4;},'qNrVV':function(_0x547f22,_0x1d97bf){return _0x547f22!==_0x1d97bf;},'lEbaG':function(_0x1ba068,_0x322d0b){return _0x1ba068!==_0x322d0b;}};var _0x30cc11,_0x421df4,_0xffebeb,_0x3a2f8c,_0x3845e4,_0x2b98f,_0x20d47f,_0x5a6943,_0x29c4b7;return{'id':_0x15b046[_0x5ec221(0x21e,'z*BR')](_0x3a2f8c=_0x5002c8[_0x5ec221(0x182,'8p6M')],null)&&_0x15b046['BsEpt'](_0x3a2f8c,void 0x0)?_0x3a2f8c:_0x5002c8['Grp'][0x0]['FileHash'],'title':_0x15b046[_0x5ec221(0x232,'y@Gu')](_0x30cc11=_0x5002c8['SongName'],null)&&_0x30cc11!==void 0x0?_0x30cc11:_0x5002c8[_0x5ec221(0x114,'oe@V')],'artist':(_0x421df4=_0x5002c8[_0x5ec221(0x261,'HYwy')])!==null&&_0x15b046['texbN'](_0x421df4,void 0x0)?_0x421df4:_0x5002c8[_0x5ec221(0x163,'$XKC')][0x0][_0x5ec221(0x1be,'8p6M')],'album':_0x15b046[_0x5ec221(0x12d,'^!ZC')](_0xffebeb=_0x5002c8[_0x5ec221(0x1eb,'*v#r')],null)&&_0x15b046[_0x5ec221(0x1bc,'j)(F')](_0xffebeb,void 0x0)?_0xffebeb:_0x5002c8['Grp'][0x0]['AlbumName'],'album_id':_0x15b046['BsEpt'](_0x3845e4=_0x5002c8[_0x5ec221(0x1f5,'z*BR')],null)&&_0x15b046[_0x5ec221(0x1af,'2$Dj')](_0x3845e4,void 0x0)?_0x3845e4:_0x5002c8[_0x5ec221(0x1ca,'!w7^')][0x0][_0x5ec221(0x226,'5#]K')],'album_audio_id':0x0,'duration':_0x5002c8[_0x5ec221(0x25f,'kZE5')],'artwork':(_0x15b046['cxnLT'](_0x2b98f=_0x5002c8['Image'],null)&&_0x2b98f!==void 0x0?_0x2b98f:_0x5002c8[_0x5ec221(0x145,'HYwy')][0x0][_0x5ec221(0x24a,'zcg)')])['replace'](_0x15b046[_0x5ec221(0x1ec,'r%er')],_0x15b046['YQsIF']),'320hash':_0x15b046['texbN'](_0x29c4b7=_0x5002c8[_0x5ec221(0x23e,'OUiY')],null)&&_0x29c4b7!==void 0x0?_0x29c4b7:undefined,'sqhash':_0x15b046[_0x5ec221(0x13a,'^!ZC')](_0x20d47f=_0x5002c8['SQFileHash'],null)&&_0x15b046['ukAAr'](_0x20d47f,void 0x0)?_0x20d47f:undefined,'ResFileHash':_0x15b046[_0x5ec221(0x25b,'j)(F')](_0x5a6943=_0x5002c8['ResFileHash'],null)&&_0x15b046['lEbaG'](_0x5a6943,void 0x0)?_0x5a6943:undefined};}function formatMusicItem2(_0x8e7500){const _0x2f810c=_0x202c5b,_0x56ec1f={'YQxMd':function(_0x532964,_0x3a3f26){return _0x532964!==_0x3a3f26;},'GNyKJ':function(_0x3ab4c3,_0xc41766){return _0x3ab4c3===_0xc41766;},'wdrTv':function(_0x116f02,_0x3d1565){return _0x116f02!==_0x3d1565;},'zNzpc':function(_0x1c037d,_0x16353b){return _0x1c037d!==_0x16353b;},'zocmT':function(_0x248702,_0x24691e){return _0x248702===_0x24691e;},'sGaHS':function(_0x31d164,_0xa637fa){return _0x31d164===_0xa637fa;},'hLQnL':function(_0x29a58d,_0x41aa31){return _0x29a58d===_0x41aa31;},'qpRfx':function(_0x513363,_0x2d5c4b){return _0x513363===_0x2d5c4b;},'lJrLR':function(_0x1e2330,_0x5bb234){return _0x1e2330!==_0x5bb234;},'PmxBd':_0x2f810c(0x19e,'^!ZC'),'jbZWX':'400'};var _0x2b7da0,_0xe00d3b,_0x28c24d,_0x2eb017,_0x364b07,_0x260b2b,_0x3d326a;return{'id':_0x8e7500['hash'],'title':_0x8e7500[_0x2f810c(0x1e2,'oe@V')],'artist':_0x56ec1f[_0x2f810c(0x166,'OUiY')](_0x2b7da0=_0x8e7500['singername'],null)&&_0x56ec1f[_0x2f810c(0x185,'RWq!')](_0x2b7da0,void 0x0)?_0x2b7da0:((_0x28c24d=_0x56ec1f[_0x2f810c(0x141,'cCSu')](_0xe00d3b=_0x8e7500[_0x2f810c(0x22b,'2$Dj')],null)||_0xe00d3b===void 0x0?void 0x0:_0xe00d3b[_0x2f810c(0x1ab,'gTPO')](_0x4a2bec=>{const _0x7f6d1a=_0x2f810c;var _0x23c971;return _0x56ec1f['YQxMd'](_0x23c971=_0x56ec1f['GNyKJ'](_0x4a2bec,null)||_0x56ec1f[_0x7f6d1a(0x22f,'OaSf')](_0x4a2bec,void 0x0)?void 0x0:_0x4a2bec[_0x7f6d1a(0x23b,'kZE5')],null)&&_0x56ec1f['wdrTv'](_0x23c971,void 0x0)?_0x23c971:'';}))===null||_0x56ec1f[_0x2f810c(0x152,'OUiY')](_0x28c24d,void 0x0)?void 0x0:_0x28c24d[_0x2f810c(0x102,'osUn')](',\\x20'))||((_0x260b2b=_0x56ec1f[_0x2f810c(0x241,'iUNf')](_0x364b07=_0x56ec1f['hLQnL'](_0x2eb017=_0x8e7500['filename'],null)||_0x56ec1f[_0x2f810c(0x19d,'j)(F')](_0x2eb017,void 0x0)?void 0x0:_0x2eb017['split']('-'),null)||_0x364b07===void 0x0?void 0x0:_0x364b07[0x0])===null||_0x260b2b===void 0x0?void 0x0:_0x260b2b['trim']()),'album':_0x56ec1f[_0x2f810c(0x107,'aE0w')](_0x3d326a=_0x8e7500['album_name'],null)&&_0x3d326a!==void 0x0?_0x3d326a:_0x8e7500['remark'],'album_id':_0x8e7500[_0x2f810c(0x17c,'j)(F')],'album_audio_id':_0x8e7500[_0x2f810c(0x179,'K$GR')],'artwork':_0x8e7500[_0x2f810c(0x227,'^!ZC')]?_0x8e7500[_0x2f810c(0x22c,'cCSu')][_0x2f810c(0x23a,'S7N@')](_0x56ec1f[_0x2f810c(0x138,'uXm3')],_0x56ec1f[_0x2f810c(0x1a2,'iUNf')]):undefined,'duration':_0x8e7500[_0x2f810c(0x1ea,'*v#r')],'320hash':_0x8e7500['320hash'],'sqhash':_0x8e7500['sqhash'],'origin_hash':_0x8e7500['origin_hash']};}function formatImportMusicItem(_0x145a1e){const _0x10e43f=_0x202c5b,_0x19d8d9={'JiAHC':function(_0x1fdca2,_0x5593ac){return _0x1fdca2!==_0x5593ac;},'bfogm':function(_0x43272d,_0x58749c){return _0x43272d!==_0x58749c;},'fpquX':function(_0x315609,_0x1545e0){return _0x315609!==_0x1545e0;},'KSFdK':function(_0x469a81,_0x12e820){return _0x469a81===_0x12e820;},'ysbgC':function(_0x50bf33,_0x378c34){return _0x50bf33!==_0x378c34;},'sLReo':function(_0xe867fd,_0x22342a){return _0xe867fd&&_0x22342a;},'OXgeE':function(_0x4038ad,_0x3c0a60){return _0x4038ad!==_0x3c0a60;},'ICpuV':_0x10e43f(0x228,'HYwy'),'iPkpx':function(_0x270946,_0x54f5bf){return _0x270946===_0x54f5bf;},'FhvjX':function(_0x10d16f,_0x4cfe09){return _0x10d16f+_0x4cfe09;},'xytaK':function(_0x166e76,_0x1e67f3){return _0x166e76!==_0x1e67f3;},'LfWon':function(_0x412a0e,_0x277b83){return _0x412a0e===_0x277b83;},'lgtvI':function(_0x1b5716,_0x136521){return _0x1b5716===_0x136521;},'WvOwc':function(_0x81bd4,_0x491cbb){return _0x81bd4===_0x491cbb;},'vxBRv':function(_0x3630d9,_0x180181){return _0x3630d9===_0x180181;},'ewbhi':function(_0x948c43,_0x37a678){return _0x948c43===_0x37a678;}};var _0x29ba59,_0x140e65,_0x426ece,_0x5e1178,_0x34f763,_0x3c02e5,_0xae2b51;let _0x1a8735=_0x145a1e[_0x10e43f(0x1db,'X2Y*')];const _0x4486ca=_0x145a1e[_0x10e43f(0x1ad,'kZE5')];if(_0x19d8d9[_0x10e43f(0x17a,'gTPO')](_0x4486ca,_0x1a8735)){if(_0x10e43f(0x237,'^!ZC')!==_0x10e43f(0x266,'^w)k')){var _0x109e8d;const [_0x4cd1c8,_0x4ca4f0]=_0x854d05[_0x10e43f(0x1c8,'*v#r')][_0x10e43f(0x1e4,'8p6M')]('-');return{'id':_0x366564[_0x10e43f(0x1f2,'iUNf')],'title':_0x4ca4f0['trim'](),'artist':_0x4cd1c8[_0x10e43f(0x16d,'HYwy')](),'album':_0x19d8d9['JiAHC'](_0x109e8d=_0x383db1[_0x10e43f(0x220,'Yt(0')],null)&&_0x19d8d9[_0x10e43f(0x172,'zcg)')](_0x109e8d,void 0x0)?_0x109e8d:_0x36d8e8[_0x10e43f(0x110,'2$Dj')],'album_id':_0x11c3a3['album_id'],'album_audio_id':_0x260e89['album_audio_id'],'artwork':_0x4d95e8[_0x10e43f(0x130,'y@Gu')],'320hash':_0x161d09['HQFileHash'],'sqhash':_0x401389[_0x10e43f(0x1bd,'kZE5')],'origin_hash':_0x16858d['id']};}else{const _0x4a7d5a=_0x1a8735['indexOf'](_0x4486ca);if(_0x19d8d9[_0x10e43f(0x1cf,'7Vt6')](_0x4a7d5a,-0x1)){if('VqqPa'!==_0x19d8d9[_0x10e43f(0x1d8,'7fal')]){var _0x29c48d;return _0x19d8d9[_0x10e43f(0x269,'uXm3')](_0x29c48d=_0x19d8d9[_0x10e43f(0x197,'*v#r')](_0xe41857,null)||_0x19d8d9[_0x10e43f(0x123,'uM&7')](_0x153632,void 0x0)?void 0x0:_0x21068d[_0x10e43f(0x1c9,'AYko')],null)&&_0x19d8d9['ysbgC'](_0x29c48d,void 0x0)?_0x29c48d:'';}else _0x1a8735=_0x19d8d9[_0x10e43f(0x1dc,'kZE5')](_0x29ba59=_0x1a8735[_0x10e43f(0x243,'iUNf')](_0x19d8d9['FhvjX'](_0x4a7d5a+_0x4486ca['length'],0x2)),null)||_0x19d8d9['KSFdK'](_0x29ba59,void 0x0)?void 0x0:_0x29ba59[_0x10e43f(0x11f,'gTPO')]();}!_0x1a8735&&(_0x1a8735=_0x4486ca);}}const _0x49babd=_0x145a1e['relate_goods'];return{'id':_0x145a1e[_0x10e43f(0x1d7,'!hM*')],'title':_0x1a8735,'artist':_0x4486ca,'album':_0x19d8d9['bfogm'](_0x140e65=_0x145a1e[_0x10e43f(0x119,'5#]K')],null)&&_0x19d8d9[_0x10e43f(0x20b,'2J8$')](_0x140e65,void 0x0)?_0x140e65:'','album_id':_0x145a1e[_0x10e43f(0x104,'oe@V')],'album_audio_id':_0x145a1e[_0x10e43f(0x173,'aE0w')],'artwork':_0x19d8d9[_0x10e43f(0x26b,'msq2')](_0x5e1178=(_0x426ece=_0x19d8d9[_0x10e43f(0x125,'*v#r')](_0x145a1e,null)||_0x145a1e===void 0x0?void 0x0:_0x145a1e[_0x10e43f(0x1b4,'ZvMu')])===null||_0x19d8d9[_0x10e43f(0x272,'RWq!')](_0x426ece,void 0x0)?void 0x0:_0x426ece[_0x10e43f(0x210,'kZE5')],null)||_0x5e1178===void 0x0?void 0x0:_0x5e1178[_0x10e43f(0x16b,'5#]K')](_0x10e43f(0x25a,'uM&7'),'400'),'320hash':_0x19d8d9['KSFdK'](_0x34f763=_0x19d8d9[_0x10e43f(0x1a8,'FrC3')](_0x49babd,null)||_0x49babd===void 0x0?void 0x0:_0x49babd[0x1],null)||_0x19d8d9[_0x10e43f(0x24f,'7fal')](_0x34f763,void 0x0)?void 0x0:_0x34f763[_0x10e43f(0x26c,'^!ZC')],'sqhash':(_0x3c02e5=_0x19d8d9['lgtvI'](_0x49babd,null)||_0x19d8d9[_0x10e43f(0x10c,'j)(F')](_0x49babd,void 0x0)?void 0x0:_0x49babd[0x2])===null||_0x3c02e5===void 0x0?void 0x0:_0x3c02e5[_0x10e43f(0x279,'RWq!')],'origin_hash':_0x19d8d9['KSFdK'](_0xae2b51=_0x49babd===null||_0x49babd===void 0x0?void 0x0:_0x49babd[0x3],null)||_0x19d8d9['ewbhi'](_0xae2b51,void 0x0)?void 0x0:_0xae2b51['hash']};}const headers={'User-Agent':_0x202c5b(0x1c4,'!w7^'),'Accept':_0x202c5b(0x16f,'d0va'),'Accept-Encoding':'gzip,\\x20deflate','Accept-Language':_0x202c5b(0x1cb,'iUNf')};async function searchMusic(_0x54cde4,_0x310c71){const _0x3fde1c=_0x202c5b,_0x9c4ab5={'VVBQZ':'https://songsearch.kugou.com/song_search_v2','feZwM':'WebFilter','KCvtM':function(_0x4197a2,_0x1b0187){return _0x4197a2>=_0x1b0187;},'aGQMp':function(_0x4ebaa2,_0x4b0e23){return _0x4ebaa2*_0x4b0e23;}},_0x4a9ca5=(await axios_1[_0x3fde1c(0x10d,'aE0w')][_0x3fde1c(0x1ed,'y@Gu')](_0x9c4ab5[_0x3fde1c(0x203,'2$Dj')],{'headers':headers,'params':{'keyword':_0x54cde4,'page':_0x310c71,'pagesize':pageSize,'userid':0x0,'clientver':'','platform':_0x9c4ab5['feZwM'],'filter':0x2,'iscorrection':0x1,'privilege_filter':0x0,'area_code':0x1}}))['data'],_0x3115e9=_0x4a9ca5[_0x3fde1c(0x12f,'7Vt6')][_0x3fde1c(0x1d3,'!hM*')][_0x3fde1c(0x25d,'7Vt6')](formatMusicItem);return{'isEnd':_0x9c4ab5[_0x3fde1c(0x21c,'(zvE')](_0x9c4ab5['aGQMp'](_0x310c71,pageSize),_0x4a9ca5[_0x3fde1c(0x208,'7fal')][_0x3fde1c(0x20e,'*3ba')]),'data':_0x3115e9};}async function searchAlbum(_0x3c2107,_0x28ecaf){const _0x48903a=_0x202c5b,_0x1aa6a1={'JFVnf':function(_0x578535,_0xcd4494){return _0x578535===_0xcd4494;},'LVcKY':_0x48903a(0x1e7,'OUiY'),'tULYq':_0x48903a(0x251,'X2Y*'),'NQVwr':_0x48903a(0x1f3,'OaSf'),'TUveg':function(_0x3f3b20,_0x356283){return _0x3f3b20>=_0x356283;},'AHHUj':function(_0x580697,_0x3fbd87){return _0x580697*_0x3fbd87;}},_0xb93857=(await axios_1[_0x48903a(0x1f0,'OaSf')]['get'](_0x1aa6a1[_0x48903a(0x15b,'z*BR')],{'headers':headers,'params':{'version':0x2394,'iscorrection':0x1,'highlight':'em','plat':0x0,'keyword':_0x3c2107,'pagesize':0x14,'page':_0x28ecaf,'sver':0x2,'with_res_tag':0x0}}))['data'],_0x56b902=_0xb93857[_0x48903a(0x1f9,'K$GR')][_0x48903a(0x180,'8#AH')][_0x48903a(0x12c,'%xII')](_0x285c5d=>{const _0x2a3bb5=_0x48903a;var _0x42f7ae,_0x440cbb;return{'id':_0x285c5d[_0x2a3bb5(0x255,'%xII')],'artwork':_0x1aa6a1['JFVnf'](_0x42f7ae=_0x285c5d[_0x2a3bb5(0x278,'uXm3')],null)||_0x42f7ae===void 0x0?void 0x0:_0x42f7ae[_0x2a3bb5(0x1b1,'r%er')](_0x1aa6a1['LVcKY'],_0x1aa6a1['tULYq']),'artist':_0x285c5d[_0x2a3bb5(0x14b,'CEre')],'title':(0x0,cheerio_1[_0x2a3bb5(0x207,'8p6M')])(_0x285c5d[_0x2a3bb5(0x246,'2^hK')])[_0x2a3bb5(0x20f,'OUiY')](),'description':_0x285c5d[_0x2a3bb5(0x238,'aE0w')],'date':_0x1aa6a1[_0x2a3bb5(0x13f,'%xII')](_0x440cbb=_0x285c5d[_0x2a3bb5(0x23c,'FrC3')],null)||_0x1aa6a1[_0x2a3bb5(0x271,'RWq!')](_0x440cbb,void 0x0)?void 0x0:_0x440cbb[_0x2a3bb5(0x109,'BFsn')](0x0,0xa)};});return{'isEnd':_0x1aa6a1[_0x48903a(0x1b3,'5#]K')](_0x1aa6a1[_0x48903a(0x169,'2^hK')](_0x28ecaf,0x14),_0xb93857['data']['total']),'data':_0x56b902};}async function searchMusicSheet(_0x4bc373,_0x1a0a22){const _0x5e6daa=_0x202c5b,_0x1c7e62={'NJFSh':_0x5e6daa(0x154,'d0va'),'Hcfzz':function(_0xc499f0,_0x3f5ef3){return _0xc499f0>=_0x3f5ef3;},'HsfiP':function(_0x1252ed,_0x44658c){return _0x1252ed*_0x44658c;}},_0x4ad1b4=(await axios_1['default']['get'](_0x5e6daa(0x1fd,'j)(F'),{'headers':headers,'params':{'format':_0x1c7e62[_0x5e6daa(0x260,'K$GR')],'keyword':_0x4bc373,'page':_0x1a0a22,'pagesize':pageSize,'showtype':0x1}}))['data'],_0x5b8acd=_0x4ad1b4['data']['info'][_0x5e6daa(0x1e8,'oe@V')](_0x32a9b7=>({'title':_0x32a9b7['specialname'],'createAt':_0x32a9b7['publishtime'],'description':_0x32a9b7[_0x5e6daa(0x257,'2$Dj')],'artist':_0x32a9b7[_0x5e6daa(0x199,'j)(F')],'coverImg':_0x32a9b7['imgurl'],'gid':_0x32a9b7[_0x5e6daa(0x1d4,'r%er')],'playCount':_0x32a9b7[_0x5e6daa(0x196,'aE0w')],'id':_0x32a9b7['specialid'],'worksNum':_0x32a9b7['songcount']}));return{'isEnd':_0x1c7e62[_0x5e6daa(0x1fe,'(zvE')](_0x1c7e62[_0x5e6daa(0x13b,'z*BR')](_0x1a0a22,pageSize),_0x4ad1b4[_0x5e6daa(0x115,'S7N@')][_0x5e6daa(0x248,'msq2')]),'data':_0x5b8acd};}const qualityLevels={'low':_0x202c5b(0x20d,'2^hK'),'standard':_0x202c5b(0x19c,'K$GR'),'high':_0x202c5b(0x1a7,'AYko'),'super':_0x202c5b(0x18b,'HYwy')};function _0x405a(){const _0x4373bf=(function(){return[_0xodt,'GjLysLtjQqpiYLamDi.tFXcCoHJmCf.kvC7xwLOd==','w1uwgq','smkMW6/dHmkn','W4LygCoGW4ZdLhdcUG','dCo1FINcLeW','jSo1hxBcMq','gapcTCo6','e15VWOf/','WPBcS8orsCoSkv/cQCk1nSomAmk9WPBcUCoTWO3cUffQW43cH0ldSSo7bdNdSZzCWRiswCkHB27cRtTyWQfPWORcSCkjW7hdKmoArSkyWOdcRSkHxSoQDealxK/dQM8zrSomW5BdRmkYW67cMSo3d8krgmoKW4u1W6pcOSkKzLmkh8kpoWhdO34NmCk5WQ3cVSk8W7/cKNitW7LWWPChW6NcJSkaW7ZdTCk2lKqKrmoHW43dHd3dVSkmW71cWPhcTXVdQSoAwSkGiYnzcmkUWR3cPa','aCkCWO/dKG','W5/cU33cVb8','aZmeWQrIj8oPWO4','gCo3WOLUW6W','vwG9WPfof8oNWQjpW5tcHmkJ','W5GFWR7cN8ot','dmo9n8ofomkufa','WQm9W6CuWQO','W7tcH8kpBa','W5PvfCo+W4/dQNpcVSkNmW','WOL2rmoHW6NdLc/dR8knmNSzWO4RW79yW5ldQmoaW4qku8o0WQe','rKP/','sf91wSkKrN/dIrdcJ8o5WPxcRSooo8kPx8kMBJNcSa','WRm5W6Sx','vmkHWOqm','W5qiWQBdIaZcI18','xmkJWOawjxuqECkLW5z4WO8fx8oSW4ZdKCkria','WO3cRdldRJu','bmoHW7a','mCoKaCozW50lW6ldSCoQ','W7hcNmkqWPxcOX8v','WP/cQ8ohtmk7wqpcRCkGnCohAmk9WQRcVSoSWPNcTW0','weG+W48l','whmqWQrB','W5NcL8oEWRtdOq','WQ/dQmkrW4FcNCkSsCo2F8kYW4f0','W6qFW5ToWR4','WP0kW7LskG','W7pcHSkkWONcQqms','WQRcTGRdUae','dgTmWObfWQO','W6lcH8kvzSobWObFfG','rCkiWRavha','W7FcJ8oNW6DN','s1eAda','WRH5lSotywa5','qmk+W7RdI8khW5/dKSknW6tcISkS','z8kWtIVdGSogW7qYW4JcLdy','jCk9WQJdJxnKW67dImoJW6tcKdpcV8kdx8kLWPddLb9IsCo1WP8pmxRcPWFcOgvuWPCMWQf4WQJdGetdLCk4cs4atSknDXFdVHv2W6JdHqRcSSo1WRPYWOVdOXJdKgm1W7PhW5GfW7D6WPu6fSk0WQddGmoLWPBdHfRcSbZcJLRdPWq7eLdcP0ddKCkLC8o1W6tcSqRdPCoEorxcPCobamotWOVdJ8kDfmofrmkQW65MaJicW4ZcMZv9W7/cNG7dPtNdPSoZ','z2eObc7dNY/cKCouua','5yE455oQ5Qw4','W4SoW4r/','emodW6uwAG','WQDCWPxdHZtcMN8L','emoXW6yTtqCzFYO','lSoKBSkBW7tdVCk0W4O','W4S0WOTSbSkJ','W5/cG8ogrbNdPtvNW4C','WQ/dRSkvW4JcNSkOp8o4zCkgW5XcWQ8','gmokWRXmW6u','WPJcRmkaWQFcJG','W5NcI8kAASok','oSoNAd7dIXW','W7BcHCovsbC','Emo9WONdPaayWRVdLG','aSk3WQldIsW','cCkvnCoGha','W50EWRpcT8oJ','aJDH','nKxcGrXWoW5S','f8oTW7aYxa','W4hcImkxD8oy','h8o0jCoCnmkEfq','W7yiWQxdJHlcQ30z','W7NcH8kqWO/cOW','W6eJwGy','c8kaaSowcG','W7H6W6a4WRaz','cCoiAq3cQW','hSoPAr7cNeT1','p8o3ca','W6X8mSozW6G','zCk+W7ZdGSkCW4tdOSkn','CSkOWPDPW78','WOJcTc3dMthcNKdcKxLA','ru5/W64','jSoZamoD','tuPLW6JcV8oY','W5ODW6rpWP0','edhcLmoKW5W','W6mZwqldISkDWOa','hZdcISolW4W','ceLPw8ob','WO7cLCkLWRlcMa','bCo1WQnDW7e','vCkUWPel','W4/dSmkxdSoJmedcNCkRdmoxymkl','tmk2kW','W5/dSmoz','WQJdKmovW4ZdTb8VW4dcJIzy','W7ObWRr4bq','W7SuWQrYka','WPOBW6beeCkj','f8kIzGS','eCkxWPJdTWy','W5m5WO3cUmoDbW','kCkOWQJdNa','b1r/w8oRrG','W5GMWPf+','eSoDuSkaW6S','dbpcOmoZW70wW6K','tt8vW5GuW79YWR8eiSoGWRC','W6urWRFdLq','W5SDW5LZ','W7S5qaa','W5qMWPz3','W6ZcSNdcQWVdI8o2W6S','f8o2iCog','WOrWW5yJvSoStKqzW6zYkG','W7lcQ8oHW5LA','W683WPlcJmoA','amkVEWK+','WPJcTmkiWRdcNM4','wCkUWPyc','dSo+wqNcIW','W7RcHmo1W7r9W5nN','WRKkWR/cJKZcKa','W6VcMSknWOFcQra'].concat((function(){return['W6lcJmkjWPZcVGy','WPFcQSoctmkKAG','l2roWPfB','hmokWRTz','W4lcRhVcJqNdUSo4W4enW5iR','WQ59kSoE','b1DSxmo2','W7NcISoKWQZdKq','gSo9iCoilmkBbq','W7qiWQBdIaZcRhOnta','pbVcKCo/W4e','W7GlWOddUqy','bmkEWPJdLHn7WR0pW7y','zeuPaJFcIfFdGCkvfCkyWRv+tSkXp2ldRePgWQRdRdCJcZCfu8ooWPxdKmkXpIq','tYqtW4uC','cNHlWOy','W67cSNpcRrxdVCo5W7y','W6JcUmoQWRZdUW','WO0oW7vr','W4HAW48MWP4','iSoYhhhcKSkdW7aXW4FcKJLY','fCkYWRyHAW','dbFcSSoZ','WP/cTCortSk5DbS','aCowW6mtDG','k8oxxtlcKu1vnmkXWPa','WQCrWPRcVL4','W4ZcKSoPW7jh','e8o5nW','F8k8WQCtpa','o8o7h8oCW5Si','nSo3dmoi','WOGDW7vhc8kiW5W','vCk7WPytoXbmp8k4W5zUWOyxyCo2WO3dJmkbnwddH8o7WQbkxSo5WRDaDZ8BuSkEW4HMW4raW4tcI8oUsNtcQCkaW7/cMCo7WPPIWQ/dPJFcPq1VW6NcUgNdHmorW6NdLwrUl0ddS8ogWObRt8kTW5TnqtBcLspcHHWFk8kMWRJdI34wW5z8mNZcVJT4WOdcUComWRdcQCoHWPzVamoZW5FdV3pdIcJdRvBdMCoKgK3dVmkshSkvW71cWQ5odapcLSooWQaKCaRcKs7dJmoKW4DUmCkDW7NdVmoKcJKwWP94vCkQe2pdImkLp8oBW6DbdCk7bmkfW5u+ACoiWQZdOhZcNWGzwCkNjLpdJmkCWRZdIvGgxI0MkSoHi8koW5Kbdmk9W4NcSSkDW7ZdUSopW5WscmofWOhcKbz4dqGLjSoLW59Lh8k7ymk0bCo7oCobWRi','ggvqWQ5nWQ1P','hmkHWQxdHc4','h3LrWOjlWQa','wmkvW7G','tSkdWR9rW75C','W5XCaW','pLrGBmo9','cSoQW7aSvG','xSk3WOWVha','WP8RW7KFWRq','W5dcGmkjuHxdQdXV','W7W3xq3dGW','c8kJWQylCG','nmoEeCohpW','bxLlWPfjWRm','WRNcICoCCSkC','W7uZsGhdJ8kB','W7a0WQ3cJSoSeCkF','W63cICo2W7b8','WPZcRZm','vCk3AXO+dmkLlCkFdCktW4zFW6VdUCo1mq','W5RcNmo+WO7dMq','tmkQW74','iCk0vs8S','W7C5WQ7cISoRfmke','CSkrm8ogcLf3W6fDW4y','W5JcQNtdPG','oSk4WOa9DK1eW4m','WP01WR3cJ0m','W7mKASkjotezW5DIW4dcRZq','W7SRBYyzzrK','xeacbdy','vv8naby','W5qCW5LKWRvh','j8k6WRpdKW','cXFcQmo2W6eEW7WNwSks','W6LkdCoSW60','cSoJAZFcNeT4','zCkKqIZdGSor','DSkPtJldHSoQW70ZW4xcKdXyuSoV','WR85W6WE','WPKjW4KbWPy','W7nOmCoIW47dKfxcVSk5pG','W4SkW5z/WQvwWOi','W447WRNcUCoDaSokjW','W44MCd4l','wgu3WRzd','vmkIW4PQWRz4W5NdHSoUsHRdJNxcKSkOxmo/BLzkptrzWQddOwJdGwRcIwu5mYZdVc/cI8kSW5rqpCkTs8kiwNn5aCk9W65oEX0','WRH5m8oECMG','CKzLW6JcRSoOWP4','5AYv5ysk5Pw36zEe5zoO5Q625y+I5AsA5BoX5P2Z5ywf77Y76k206ik45BYm56225BYd','WO7cPSoxsSkZ','vx4uhse','W43dSSkscSoUnWpcNSkngmooya','W7JcKSkpFCkvW44Dh0yvB1b6WOBdM8knu8oOjmobW5RdOmkfW6nwAbldSSkWgqldRJaMaSkTqCocW4hdVfzcWOmCtc1CW7CsW7xdG8oxj8opsSoxzhJcNhGTWQ8N','W7/cP8oSzb4','W7mdWO1ekq','W6CbWRtdKqdcOx4','W5nna8o7WPJcMJlcQ8oKpwunW5esWOzuW5FdLCoCW4SCcCo6WQVdRCoGWRC','WQ/cRYRdKW','W6hcPCohW69z','z8oMW7y','5yAM5l2P5yYPW4dNP6JMIApPL5BPNlDJ5yAO5yI56i+U','5lMq5Pwl5O+f6yEk54Q2WOnlmoMaS+I8U+MgToEjTEEHRUwSKEweUU++TUI/IowhHEE7KUAwJ+wSS+MeHEElT+EGJ+woJ+wmLEoaMG','W7lcGmkuASoc','W7/cJCoXW6bLW6bYW6BdLHpcMINdOCox','WQnYkSonBW','WOlcRSkDWRBcHa','W7ddIfGKW7GVvG','W6rSW70','W7fSW7KUWRqhqa','xCkoWRnpW7PNohuYuSkfW4hcVSkF','duzWWO5d','W70OWONcSSoU','gCoQEs7cKhD0mq','C8kKwcy','fCkpfSo9ea','W7BcI8o9ucm','WOlcRSkpWQS','zCkCWRaLzx4Sw8kAW7K','W7W9WOBcQmoNcSoxka','5yEo5yMfwCkz','W7RcUmotWP4','W4OjWPHMaa','WQWxWRlcN1FcGSoeaa','lSoKBSkBW7pdUa','WQpdNSokACkyW5eeqq9unLyXW4NcHCkzdCkZmSkjW5VdQSoDW7XhAXBcTSoMrq7cQW','v8ofWQRdItvqWPiV','kSkSWQG','WRpcTdhdMYC','W6OCsaqj','W6NcV2BcVW','h8kBWRddMJK','W7qhWQFdMblcSxafua'].concat((function(){return['p1D0vmoU','BCoJW5v7mbzjW61UASozWRy','W59ya8oQ','pSkHWRNdMd0','WOJcS8odFCkX','W4GLzstdSW','W67cJCoYW6XRW5bMW73dHG','eSkhWQCQtG','omoWCSkrW67dTCk2W4e','fSoVEddcK0LWma','W5aSWO3cGSoz','a8k2yqi','wCkAWRLtW7bq','cCo2st3cHq','rSk8WOSzlvC','q8kkWPldHWHxWOqpW7WcWPBdJdPXdG','W7xcKCkuWPZcOGK5W73cHJf5C8oFW6ZdS8kOssCWjConWRnYySo+wCo+WPC7W5pcPCk3vqfmfmoqF0a','qSkpW7RdOSkc','cCoMW54jyq','dSoUWQD5W5e','lZNdQdakn3GCDGS','cmoZAdm','W50oW551WR5BWPTi','W4maW4nTWRXFWOvE','E8kIwdhdOG','W6DSW68RWRSbDw3dVmocWQrDW5RcPa','uConW4S','e2Ts','WOr3W5i','uSkIW6ddHmknW5/dO8kcW6JcGG','wmk3W4P7','W7pcKCkkWRhcMa','W7KSWRRcOmol','W6BdIe4PW6WGrW','smkKW5D3','W4eXWRldMay','pKFcHqy','W4RcU8klWQtcUa','W6ZdRslcJMBcJw/cLcvComo6bCkigCkfW6W/zCkKoLDTWPlcHCoGECk3W6BdKmoLqq','hSk3WQGbvq','FSkRsIG','gmkzomovna','54gZ6zsX5Qs75y6Q','W7K1W69f','dmoJyZNcSW','CSkAW4JdISkeW4JdHCkcW7BcJW','W5q1WOFcQa','W7aJtqFdHa','CSkmpmovgLa','m8kwcCo+ha','WQSsWRZcJ1tcJCoicca','kColW6y5yW','eCoQESkzW7BdSmk4WOdcJu/cHW/cQ8kXASkpWPbLWRqkrSkRW6XEW4BcSSoinvDZCNpdLglcOZrdo3xdHxVdKCkqoNqreSk3u2rkpJSQDmklW4tcK8keWRRcPxSZWP3cGSkftSkiW5pdLCo8v8oJWQlcHmoqW4TykYm2qK0VWQtcPt3cPSk1amk3WP7cIvZcKMjEW4aZt8oXWROYhWbSA3pdL3NcVW','jmoTW40WCq','W4K9WOtcQSokgCokixtcUq','W7WjWQpdIbpcRG','p8k9WO0RA0vpW58','W44AW4r2WR9iWQLdW5RdSmkR','g8o3Ca','gCoSWQKDD1KkExztW4bLW5Tq','WONcNCoSA8kr','sejSW7RcUCo2','oIBdMard','hCooh8omW6W','FSkKWRGSoq','fCoJFZlcNazUiCkTWOOpW4SMWPvnWOPBWQZdKSoqWOK','Dmk4W7/dT8kH','cCkuWOJdHXm','W7pdHfO','xeqpgtFdIq','b1D+qq','dCkCWOJdMW','f8kGcSoIkq','W6RcUSoSWPZdIG','WPW1WONcRSokgmoxk3ZcPvO','wgy8WPG','smkBW6xdK8kq','mSkmg8oZ','W5pdUCoyW7xdK2/cIsldV8k4va','WPm2W74DWO4','tSkZW452W600WPm','cmkNWPSRk3W5','W77cSxZcUqJdTCoYW6O','WOibq8k9WPVcH1JcUSkSi14P','W4KKWOBcPmoB','rL4iaG','W5RcM8oCW55M','vemhfYFdHW','W6dcV2i','W5KQWOvJeCkY','pCkHWPmVCu1nW5q','gmk4WOm7AgPdW5D9','W7ZdUxapW4G','WO4kW7u','W7NcHmoN','hwvxWOvy','W7RcVmobWP7dNSoYEW','gHFcQmo5W6eE','c8oLW7C2','W7BcRCotWO/cKCkXimomz8k7W49uWP/dMSksywtdOaXPW7NcSqCCu8olcmk9mZFdH8koWRhdRSo/W6qNl8kJfmoMrCobBq','WQm3W6SxWOG','WPy0W70dWOLHWOq','zCkDo8oagK9T','tCkUDSkFBCkurCoAgJRcM8ojWQdcUSk3W6ldVCouWP9MamoNWPVdSCkOjSoGgCk2n8ozpW','xemCW6ifW63cVa','wmkdWQvB','W7yJBJiEzq','n8oltH7cVW','dSoLW7q','emoYBYVdHWCYomkTWPOdWOKOWOnoWOSaW6NdHmoyWOVcNc3dUSkopSonWRVcUMBcUCkiW54mvXxcKNZdRhb+W7zoWPBdL3T1aW','W5S/WQ7cKCoK','i0PIsCox','W5ZcPmolzsW','w3qTW40b','ySkupmosheP/W7K','W4BcV8kMWQZcLG','qmkZW6FdJmkB','A8kHWR3dJIf2','k8kLWQNdGXe','W5y7WOVcQq','oSkcdSo2','rLiyW75EWQhdTSk3WPpdV0HkWQNdTXbAW4Skmb/dSmk0r17dQd5kzeGIWPhdPetcUu1wW5C6WOBdG8oUtwFcN2TEpCo9W6ddPmoAW4S','W6ZcGmo9W75HW5S','WRihWQRcM3i','pCkrWOZdKIe','W43cM8ofxXddQIzU','wKKyW68i'];}()));}()));}());_0x405a=function(){return _0x4373bf;};return _0x405a();};async function getMediaSource(_0x33d1bd,_0x26e0e3){const _0x32ec69=_0x202c5b,_0x3c67bf=(await axios_1[_0x32ec69(0x1f6,'CEre')][_0x32ec69(0x1ee,'aE0w')]('https://music.haitangw.cc/kgqq/kg.php?id='+_0x33d1bd['id']+_0x32ec69(0x146,'BFsn')+qualityLevels[_0x26e0e3]))[_0x32ec69(0x10b,'^!ZC')];return{'url':_0x3c67bf[_0x32ec69(0x103,'RWq!')]['url']};}async function getTopLists(){const _0x26f787=_0x202c5b,_0x3ba27f={'vaMCP':function(_0x30d01b,_0x1b2dfd){return _0x30d01b===_0x1b2dfd;},'nbfKh':function(_0x199dab,_0x976578){return _0x199dab===_0x976578;},'RszgO':function(_0xe063ee,_0x1d6498){return _0xe063ee===_0x1d6498;},'xnYEN':_0x26f787(0x1c3,'iUNf'),'RRlgp':_0x26f787(0x22d,'*3ba'),'FzBBK':_0x26f787(0x275,'!hM*'),'uRACe':function(_0x159e89,_0x4791f7){return _0x159e89===_0x4791f7;},'BBEYI':'{size}','EqTjk':_0x26f787(0x26f,'8#AH'),'oqTFI':function(_0x5a73b7,_0x5d5509){return _0x5a73b7===_0x5d5509;},'mTMjS':_0x26f787(0x216,'cCSu'),'TmWmI':'\u7279\u8272\u97f3\u4e50\u699c','jcvnd':_0x26f787(0x23f,'2$Dj'),'gSCSz':function(_0x20ad12,_0x19014f){return _0x20ad12!==_0x19014f;}},_0x109c23=(await axios_1[_0x26f787(0x27b,'^w)k')][_0x26f787(0x229,'iUNf')](_0x3ba27f[_0x26f787(0x215,'gTPO')],{'headers':headers}))[_0x26f787(0x239,'OUiY')][_0x26f787(0x115,'S7N@')]['info'],_0x240465=[{'title':_0x26f787(0x1ba,'OaSf'),'data':[]},{'title':_0x3ba27f[_0x26f787(0x11a,'^w)k')],'data':[]},{'title':_0x3ba27f['jcvnd'],'data':[]}],_0x5a72e8={'title':'\u5176\u4ed6','data':[]};return _0x109c23[_0x26f787(0x132,'gTPO')](_0x381e3a=>{const _0x24d35e=_0x26f787,_0x2dbd36={'Qnlzw':function(_0x3d73a1,_0x273f45){return _0x3ba27f['vaMCP'](_0x3d73a1,_0x273f45);},'Qhyyg':_0x24d35e(0x153,'AYko'),'kQmHu':_0x24d35e(0x1aa,'!hM*'),'OMUEB':function(_0x2f3940,_0x46a8b9){const _0x52c9d6=_0x24d35e;return _0x3ba27f[_0x52c9d6(0x160,'X2Y*')](_0x2f3940,_0x46a8b9);}};if(_0x3ba27f[_0x24d35e(0x12b,'aE0w')](_0x3ba27f['xnYEN'],_0x3ba27f['xnYEN'])){var _0x1840a3,_0x52494a,_0x5f5063,_0x4497dd;if(_0x3ba27f['RszgO'](_0x381e3a['classify'],0x1)||_0x381e3a[_0x24d35e(0x120,'oe@V')]===0x2)_0x3ba27f[_0x24d35e(0x121,'OaSf')](_0x3ba27f[_0x24d35e(0x18e,'d0va')],_0x3ba27f[_0x24d35e(0x1b9,'7fal')])?_0x16707f[0x2]['data'][_0x24d35e(0x100,'5#]K')]({'id':_0x2f6db3[_0x24d35e(0x187,'!w7^')],'description':_0x7daa7b[_0x24d35e(0x116,'uXm3')],'coverImg':_0x2dbd36[_0x24d35e(0x112,'gTPO')](_0x556e65=_0x1f98ae[_0x24d35e(0x12e,'7Vt6')],null)||_0x2a9376===void 0x0?void 0x0:_0x5b02e3['replace'](_0x2dbd36[_0x24d35e(0x133,'d0va')],_0x2dbd36['kQmHu']),'title':_0xbe3664[_0x24d35e(0x236,'zcg)')]}):_0x240465[0x0]['data'][_0x24d35e(0x1a5,'j)(F')]({'id':_0x381e3a[_0x24d35e(0x158,'FrC3')],'description':_0x381e3a['intro'],'coverImg':(_0x1840a3=_0x381e3a[_0x24d35e(0x1cd,'$XKC')])===null||_0x3ba27f[_0x24d35e(0x18c,'O0#n')](_0x1840a3,void 0x0)?void 0x0:_0x1840a3[_0x24d35e(0x21d,'%xII')](_0x24d35e(0x10f,'2$Dj'),_0x24d35e(0x26e,'j)(F')),'title':_0x381e3a['rankname']});else{if(_0x381e3a[_0x24d35e(0x14d,'*v#r')]===0x3||_0x381e3a[_0x24d35e(0x256,'5#]K')]===0x5)_0x24d35e(0x147,'OaSf')!=='DEYqr'?_0x19d347[_0x24d35e(0x258,'osUn')](_0x4f6153):_0x240465[0x1][_0x24d35e(0x217,'!hM*')]['push']({'id':_0x381e3a[_0x24d35e(0x20a,'aE0w')],'description':_0x381e3a['intro'],'coverImg':(_0x52494a=_0x381e3a[_0x24d35e(0x111,'cCSu')])===null||_0x3ba27f['nbfKh'](_0x52494a,void 0x0)?void 0x0:_0x52494a[_0x24d35e(0x178,'uM&7')](_0x3ba27f['BBEYI'],_0x3ba27f['EqTjk']),'title':_0x381e3a[_0x24d35e(0x244,'!w7^')]});else _0x3ba27f[_0x24d35e(0x201,'*3ba')](_0x381e3a[_0x24d35e(0x202,'CEre')],0x4)?_0x240465[0x2][_0x24d35e(0x18d,'oe@V')]['push']({'id':_0x381e3a[_0x24d35e(0x235,'gTPO')],'description':_0x381e3a[_0x24d35e(0x139,'iUNf')],'coverImg':_0x3ba27f[_0x24d35e(0x16e,'[9EI')](_0x5f5063=_0x381e3a[_0x24d35e(0x1c7,'5#]K')],null)||_0x3ba27f[_0x24d35e(0x21a,'msq2')](_0x5f5063,void 0x0)?void 0x0:_0x5f5063[_0x24d35e(0x1e0,'ci9J')](_0x24d35e(0x140,'gTPO'),_0x3ba27f['EqTjk']),'title':_0x381e3a[_0x24d35e(0x211,'Yt(0')]}):_0x5a72e8[_0x24d35e(0x274,'BFsn')][_0x24d35e(0x19b,'BFsn')]({'id':_0x381e3a[_0x24d35e(0x1f1,'^w)k')],'description':_0x381e3a[_0x24d35e(0x175,'8#AH')],'coverImg':_0x3ba27f[_0x24d35e(0x156,'Yt(0')](_0x4497dd=_0x381e3a[_0x24d35e(0x1e9,'RWq!')],null)||_0x4497dd===void 0x0?void 0x0:_0x4497dd[_0x24d35e(0x157,'j)(F')](_0x3ba27f['BBEYI'],_0x3ba27f['EqTjk']),'title':_0x381e3a['rankname']});}}else{var _0x5a1b85,_0x10ca40;return{'id':_0x685c0d['albumid'],'artwork':_0x2dbd36[_0x24d35e(0x254,'zcg)')](_0x5a1b85=_0x25f61d[_0x24d35e(0x1fa,'O0#n')],null)||_0x2dbd36[_0x24d35e(0x190,'uXm3')](_0x5a1b85,void 0x0)?void 0x0:_0x5a1b85[_0x24d35e(0x1f8,'*3ba')](_0x2dbd36[_0x24d35e(0x15f,'O0#n')],_0x24d35e(0x135,'msq2')),'artist':_0x164c2a[_0x24d35e(0x1c6,'8p6M')],'title':(0x0,_0x21ebc2[_0x24d35e(0x1dd,'7fal')])(_0x32b8ef[_0x24d35e(0x1c2,'2J8$')])[_0x24d35e(0x263,'7Vt6')](),'description':_0x36d962[_0x24d35e(0x257,'2$Dj')],'date':(_0x10ca40=_0x3d3ee4['publishtime'])===null||_0x2dbd36[_0x24d35e(0x1fb,'j)(F')](_0x10ca40,void 0x0)?void 0x0:_0x10ca40[_0x24d35e(0x249,'8#AH')](0x0,0xa)};}}),_0x3ba27f[_0x26f787(0x117,'OaSf')](_0x5a72e8[_0x26f787(0x21f,'zcg)')]['length'],0x0)&&_0x240465['push'](_0x5a72e8),_0x240465;}async function getTopListDetail(_0x549714){const _0x4d7c6e=_0x202c5b,_0x489767=await axios_1[_0x4d7c6e(0x176,'r%er')][_0x4d7c6e(0x137,'Yt(0')](_0x4d7c6e(0x23d,'d0va')+_0x549714['id']+_0x4d7c6e(0x19f,'!hM*'),{'headers':headers});return Object[_0x4d7c6e(0x134,'gTPO')](Object['assign']({},_0x549714),{'musicList':_0x489767[_0x4d7c6e(0x240,'AYko')][_0x4d7c6e(0x126,'^w)k')][_0x4d7c6e(0x1b4,'ZvMu')][_0x4d7c6e(0x148,'kZE5')](formatMusicItem2)});}async function getLyricDownload(_0x4cfa4a){const _0xfcdbd3=_0x202c5b,_0x25a42f={'UsqTI':'KuGou2012-9020-ExpandSearchManager','MLbrd':_0xfcdbd3(0x222,'$XKC')},_0x140e50=(await(0x0,axios_1[_0xfcdbd3(0x14a,'(zvE')])({'url':_0xfcdbd3(0x161,'ci9J')+_0x4cfa4a['id']+_0xfcdbd3(0x1da,'8p6M')+_0x4cfa4a[_0xfcdbd3(0x11c,'!hM*')]+_0xfcdbd3(0x223,'uXm3'),'headers':{'KG-RC':0x1,'KG-THash':_0xfcdbd3(0x1a0,'2$Dj'),'User-Agent':_0x25a42f[_0xfcdbd3(0x1d2,'kZE5')]},'method':_0x25a42f[_0xfcdbd3(0x1ce,'NoY]')],'xsrfCookieName':_0xfcdbd3(0x1a4,'NoY]'),'withCredentials':!![]}))[_0xfcdbd3(0x1f9,'K$GR')];return{'rawLrc':he[_0xfcdbd3(0x142,'osUn')](CryptoJs['enc'][_0xfcdbd3(0x24b,'j)(F')][_0xfcdbd3(0x165,'cCSu')](_0x140e50[_0xfcdbd3(0x233,'2$Dj')])[_0xfcdbd3(0x15e,'8p6M')](CryptoJs['enc'][_0xfcdbd3(0x14c,'oe@V')]))};}async function getLyric(_0x2cbe57){const _0x44f9d7=_0x202c5b,_0x531a05={'XxVzF':'expand_search_manager.cpp:852736169:451','NGBaZ':_0x44f9d7(0x11d,'OUiY'),'nZrux':_0x44f9d7(0x18a,'d0va'),'YsLJX':_0x44f9d7(0x181,'^!ZC'),'vtfDg':function(_0x4df725,_0x5b0842){return _0x4df725(_0x5b0842);}},_0x5a2f6e=(await(0x0,axios_1['default'])({'url':_0x44f9d7(0x168,'zcg)')+_0x2cbe57[_0x44f9d7(0x253,'iUNf')]+_0x44f9d7(0x205,'d0va')+_0x2cbe57['id']+'&timelength='+_0x2cbe57[_0x44f9d7(0x198,'!w7^')],'headers':{'KG-RC':0x1,'KG-THash':_0x531a05['XxVzF'],'User-Agent':_0x531a05['NGBaZ']},'method':_0x531a05['nZrux'],'xsrfCookieName':_0x531a05[_0x44f9d7(0x195,'osUn')],'withCredentials':!![]}))['data'],_0x3f727e=_0x5a2f6e[_0x44f9d7(0x155,'^w)k')][0x0];return await _0x531a05[_0x44f9d7(0x194,'cCSu')](getLyricDownload,{'id':_0x3f727e['id'],'accessKey':_0x3f727e[_0x44f9d7(0x18f,'5#]K')]});}async function getAlbumInfo(_0x8cadef,_0x488f0b=0x1){const _0xfa77c1=_0x202c5b,_0x3f1022={'tcKca':function(_0x21f94d,_0xd5df63){return _0x21f94d!==_0xd5df63;},'MszgN':'http://mobilecdn.kugou.com/api/v3/album/song','WKcuz':function(_0x37d150,_0x32cfed){return _0x37d150>=_0x32cfed;},'urTQM':function(_0x2c8cb0,_0xfb1136){return _0x2c8cb0*_0xfb1136;}},_0x5a57bc=(await axios_1['default'][_0xfa77c1(0x177,'uM&7')](_0x3f1022[_0xfa77c1(0x1ff,'uXm3')],{'params':{'version':0x2394,'albumid':_0x8cadef['id'],'plat':0x0,'pagesize':0x64,'area_code':0x1,'page':_0x488f0b,'with_res_tag':0x0}}))[_0xfa77c1(0x1ae,'ci9J')];return{'isEnd':_0x3f1022[_0xfa77c1(0x14e,'2J8$')](_0x3f1022[_0xfa77c1(0x265,'AYko')](_0x488f0b,0x64),_0x5a57bc[_0xfa77c1(0x184,'OaSf')]['total']),'albumItem':{'worksNum':_0x5a57bc['data'][_0xfa77c1(0x1f4,'z*BR')]},'musicList':_0x5a57bc['data'][_0xfa77c1(0x1d6,'uXm3')]['map'](_0x283bda=>{const _0x20dcf5=_0xfa77c1;var _0x3a976b;const [_0x48efc6,_0x4c9e02]=_0x283bda['filename'][_0x20dcf5(0x151,'OUiY')]('-');return{'id':_0x283bda[_0x20dcf5(0x1d7,'!hM*')],'title':_0x4c9e02[_0x20dcf5(0x1b2,'ci9J')](),'artist':_0x48efc6[_0x20dcf5(0x101,'AYko')](),'album':_0x3f1022['tcKca'](_0x3a976b=_0x283bda['album_name'],null)&&_0x3f1022[_0x20dcf5(0x1d9,'OaSf')](_0x3a976b,void 0x0)?_0x3a976b:_0x283bda[_0x20dcf5(0x162,'S7N@')],'album_id':_0x283bda[_0x20dcf5(0x252,'ZvMu')],'album_audio_id':_0x283bda['album_audio_id'],'artwork':_0x8cadef[_0x20dcf5(0x127,'cCSu')],'320hash':_0x283bda[_0x20dcf5(0x15c,'Yt(0')],'sqhash':_0x283bda[_0x20dcf5(0x129,'j)(F')],'origin_hash':_0x283bda['id']};})};}async function importMusicSheet(_0x216d09){const _0x244439=_0x202c5b,_0x2ef569={'CxPmd':function(_0x4009a7,_0x190a23){return _0x4009a7!==_0x190a23;},'NXRpq':function(_0x4ce78b,_0x2e0165){return _0x4ce78b===_0x2e0165;},'Reoby':function(_0xf7d14,_0x335556){return _0xf7d14+_0x335556;},'Hjqyc':function(_0x3394f1,_0x37e1e9){return _0x3394f1+_0x37e1e9;},'gJYzL':function(_0x4e2364,_0x492cad){return _0x4e2364===_0x492cad;},'UcxAu':function(_0x5f27eb,_0x503f69){return _0x5f27eb===_0x503f69;},'ZRoYt':_0x244439(0x245,'RWq!'),'wFLYD':_0x244439(0x1ac,'RWq!'),'HdYaW':_0x244439(0x1bf,'osUn'),'WEERJ':_0x244439(0x1e6,'[9EI'),'tuMct':'21511157a05844bd085308bc76ef3343','CDoRJ':_0x244439(0x1f7,'%xII'),'GiInH':function(_0x315699,_0x5553c9){return _0x315699===_0x5553c9;},'cDtAj':'VOqby','moDDg':_0x244439(0x1b6,'HYwy'),'KeRRZ':_0x244439(0x188,'zcg)'),'bKoTX':function(_0x5d54f2,_0x30e13c){return _0x5d54f2===_0x30e13c;},'bRgMO':function(_0x470568,_0x58215f){return _0x470568===_0x58215f;},'XlwaA':'WmxwS','Klljo':_0x244439(0x1df,'z*BR'),'CkZOq':_0x244439(0x213,'FrC3'),'jxgOv':_0x244439(0x221,'Yt(0'),'eULvs':_0x244439(0x1d1,'j)(F'),'wZIRG':function(_0x236e1a,_0x407c01){return _0x236e1a===_0x407c01;}};var _0x2ed3b1;let _0x17551d=_0x2ef569[_0x244439(0x24e,'!hM*')](_0x2ed3b1=_0x216d09[_0x244439(0x13d,'osUn')](/^(?:.*?)(\\d+)(?:.*?)$/),null)||_0x2ed3b1===void 0x0?void 0x0:_0x2ed3b1[0x1],_0x5a287e=[];if(!_0x17551d){if(_0x2ef569[_0x244439(0x25e,'Yt(0')]!=='ntqHr')return;else{const _0x4ac91a=_0x539347['indexOf'](_0x23d214);_0x2ef569[_0x244439(0x1b0,'8p6M')](_0x4ac91a,-0x1)&&(_0x33ca71=_0x2ef569[_0x244439(0x206,'!hM*')](_0x158867=_0x47856c['substring'](_0x2ef569[_0x244439(0x218,'oe@V')](_0x2ef569[_0x244439(0x24c,'2^hK')](_0x4ac91a,_0x35d925[_0x244439(0x264,'$XKC')]),0x2)),null)||_0x430082===void 0x0?void 0x0:_0xd55dd8['trim']()),!_0x3529d1&&(_0x425157=_0x350418);}}let _0x1d683c=await axios_1[_0x244439(0x15d,'AYko')]['post'](_0x244439(0x16c,'Yt(0'),{'appid':0x3e9,'clientver':0x233c,'mid':_0x2ef569['tuMct'],'clienttime':0x262efa1f,'key':_0x2ef569[_0x244439(0x16a,'RWq!')],'data':_0x17551d});if(_0x2ef569[_0x244439(0x1c5,'iUNf')](_0x1d683c[_0x244439(0x1c0,'CEre')],0xc8)&&_0x2ef569[_0x244439(0x27a,'!w7^')](_0x1d683c[_0x244439(0x184,'OaSf')]['status'],0x1)){if(_0x2ef569[_0x244439(0x259,'7fal')](_0x2ef569['cDtAj'],_0x2ef569[_0x244439(0x1a1,'kZE5')])){let _0x5c7dd8=_0x1d683c[_0x244439(0x277,'d0va')]['data'],_0xb6a103=await axios_1[_0x244439(0x150,'O0#n')][_0x244439(0x113,'msq2')](_0x244439(0x209,'*3ba'),{'appid':0x3e9,'clientver':0x2780,'mid':_0x2ef569[_0x244439(0x11b,'5#]K')],'clienttime':0x2b0c31ed,'key':_0x2ef569['KeRRZ'],'data':{'id':_0x5c7dd8[_0x244439(0x105,'%xII')]['id'],'type':0x3,'userid':_0x5c7dd8[_0x244439(0x1e5,'OUiY')][_0x244439(0x212,'j)(F')],'collect_type':_0x5c7dd8[_0x244439(0x225,'^!ZC')][_0x244439(0x21b,'X2Y*')],'page':0x1,'pagesize':_0x5c7dd8[_0x244439(0x1b8,'FrC3')][_0x244439(0x1ef,'gTPO')]}});if(_0x2ef569[_0x244439(0x1a3,'msq2')](_0xb6a103[_0x244439(0x10e,'2J8$')],0xc8)&&_0x2ef569[_0x244439(0x128,'iUNf')](_0xb6a103[_0x244439(0x103,'RWq!')][_0x244439(0x10a,'8#AH')],0x1)){if(_0x2ef569[_0x244439(0x20c,'!hM*')]===_0x2ef569[_0x244439(0x17e,'7fal')])_0x1be9f9[0x0][_0x244439(0x224,'z*BR')][_0x244439(0x214,'^w)k')]({'id':_0x990855[_0x244439(0x136,'K$GR')],'description':_0x3c8430[_0x244439(0x174,'S7N@')],'coverImg':_0x2ef569[_0x244439(0x250,'8p6M')](_0x216b1f=_0x4719f5[_0x244439(0x276,'8p6M')],null)||_0x2ef569[_0x244439(0x108,'8p6M')](_0x5f071d,void 0x0)?void 0x0:_0x263853[_0x244439(0x1b1,'r%er')](_0x2ef569[_0x244439(0x1b5,'2$Dj')],_0x2ef569[_0x244439(0x268,'^w)k')]),'title':_0x177a94[_0x244439(0x1a6,'AYko')]});else{let _0x4abbec=[];_0xb6a103[_0x244439(0x17d,'FrC3')][_0x244439(0x192,'Yt(0')][_0x244439(0x25c,'j)(F')](_0x23a08a=>{const _0x1a54e9=_0x244439;_0x4abbec[_0x1a54e9(0x19b,'BFsn')]({'album_audio_id':0x0,'album_id':'0','hash':_0x23a08a[_0x1a54e9(0x15a,'z*BR')],'id':0x0,'name':_0x23a08a[_0x1a54e9(0x186,'2J8$')][_0x1a54e9(0x267,'osUn')](_0x1a54e9(0x1bb,'z*BR'),''),'page_id':0x0,'type':_0x2ef569[_0x1a54e9(0x17f,'2^hK')]});});let _0x49343a={'appid':0x3e9,'area_code':'1','behavior':'play','clientver':_0x2ef569[_0x244439(0x1d0,'^!ZC')],'dfid':_0x2ef569[_0x244439(0x19a,'8p6M')],'mid':_0x2ef569[_0x244439(0x12a,'2J8$')],'need_hash_offset':0x1,'relate':0x1,'resource':_0x4abbec,'token':'','userid':'0','vip':0x0};var _0x507872=await axios_1[_0x244439(0x118,'%xII')]['post'](_0x244439(0x131,'^!ZC'),_0x49343a,{'headers':{'x-router':_0x2ef569[_0x244439(0x26a,'8#AH')]}});_0x2ef569[_0x244439(0x200,'2^hK')](_0xb6a103[_0x244439(0x1d5,'OUiY')],0xc8)&&_0x2ef569[_0x244439(0x1cc,'cCSu')](_0xb6a103[_0x244439(0x122,'y@Gu')][_0x244439(0x273,'y@Gu')],0x1)&&(_0x5a287e=_0x507872[_0x244439(0x262,'$XKC')][_0x244439(0x184,'OaSf')][_0x244439(0x1fc,'iUNf')](formatImportMusicItem));}}}else return;}return _0x5a287e;}module['exports']={'platform':_0x202c5b(0x183,'oe@V'),'version':_0x202c5b(0x11e,'gTPO'),'author':_0x202c5b(0x170,'2J8$'),'srcUrl':'https://13413.kstore.vip/yuanli/kg.js','cacheControl':_0x202c5b(0x13c,'2^hK'),'description':'','primaryKey':['id','album_id',_0x202c5b(0x159,'FrC3')],'hints':{'importMusicSheet':[_0x202c5b(0x171,'5#]K'),_0x202c5b(0x164,'y@Gu')]},'supportedSearchType':['music','album',_0x202c5b(0x193,'d0va')],async 'search'(_0x37c94f,_0x4a5e06,_0x4da6c5){const _0x3c0d56=_0x202c5b,_0x3c01e5={'RwGEw':function(_0x5dea3d,_0x475e9c){return _0x5dea3d===_0x475e9c;},'qkIFU':_0x3c0d56(0x1c1,'7fal'),'ntAYp':function(_0x41770e,_0x4d7d3e,_0x452ea7){return _0x41770e(_0x4d7d3e,_0x452ea7);},'KpkPn':'album','GcIOP':_0x3c0d56(0x144,'aE0w')};if(_0x3c01e5[_0x3c0d56(0x13e,'*v#r')](_0x4da6c5,_0x3c01e5[_0x3c0d56(0x234,'HYwy')]))return await _0x3c01e5[_0x3c0d56(0x22e,'X2Y*')](searchMusic,_0x37c94f,_0x4a5e06);else{if(_0x3c01e5[_0x3c0d56(0x149,'BFsn')](_0x4da6c5,_0x3c01e5[_0x3c0d56(0x231,'AYko')]))return await searchAlbum(_0x37c94f,_0x4a5e06);else{if(_0x4da6c5===_0x3c01e5[_0x3c0d56(0x1b7,'*v#r')])return await _0x3c01e5[_0x3c0d56(0x17b,'(zvE')](searchMusicSheet,_0x37c94f,_0x4a5e06);}}},'getMediaSource':getMediaSource,'getTopLists':getTopLists,'getLyric':getLyric,'getTopListDetail':getTopListDetail,'getAlbumInfo':getAlbumInfo,'importMusicSheet':importMusicSheet};var version_ = 'jsjiami.com.v7';", "id": "msg_1789568507161"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 元力KG, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568507161: True [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 元力KG [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸歌词 [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u78b3\u9178\u6b4c\u8bcd", "code": "'use strict';const _0x25ab3b=_0x2c17;function _0x2c17(_0x2eecc5,_0x476554){const _0x3c5e3=_0x3c5e();return _0x2c17=function(_0x2c17df,_0x528ba4){_0x2c17df=_0x2c17df-0x1af;let _0x15dbed=_0x3c5e3[_0x2c17df];return _0x15dbed;},_0x2c17(_0x2eecc5,_0x476554);}(function(_0x5527c0,_0x510214){const _0x548ef0=_0x2c17,_0x2b7c7d=_0x5527c0();while(!![]){try{const _0x33bb76=parseInt(_0x548ef0(0x1c5))/0x1*(parseInt(_0x548ef0(0x1b8))/0x2)+-parseInt(_0x548ef0(0x1c9))/0x3*(-parseInt(_0x548ef0(0x1ce))/0x4)+-parseInt(_0x548ef0(0x1ca))/0x5*(parseInt(_0x548ef0(0x1c0))/0x6)+-parseInt(_0x548ef0(0x1cd))/0x7*(-parseInt(_0x548ef0(0x1af))/0x8)+parseInt(_0x548ef0(0x1b1))/0x9+parseInt(_0x548ef0(0x1b0))/0xa*(parseInt(_0x548ef0(0x1bb))/0xb)+parseInt(_0x548ef0(0x1b2))/0xc*(-parseInt(_0x548ef0(0x1cc))/0xd);if(_0x33bb76===_0x510214)break;else _0x2b7c7d['push'](_0x2b7c7d['shift']());}catch(_0x19fa85){_0x2b7c7d['push'](_0x2b7c7d['shift']());}}}(_0x3c5e,0x668bf));function _0x3c5e(){const _0x5a3499=['children','data','244623TJXJxM','2485SYoAHl','lNlXU','13YiBfpx','5432833WZWqMU','28igekvH','8pkAPGm','3689300huorYV','1733805OwWWhp','19015284nkIvSK','\u8461\u8404\u7403\u541b','div#lyrics','\u78b3\u9178\u6b4c\u8bcd\u67e5\u8be2','defineProperty','default','24hFjEzj','VvzDz','lyric','11NOIBdh','trim','replace','https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/geciwang/index.js','no-store','1626kNXRcY','href','https://zh.followlyrics.com/search','text','get','19237CfXSFd','toArray'];_0x3c5e=function(){return _0x5a3499;};return _0x3c5e();}Object[_0x25ab3b(0x1b6)](exports,'__esModule',{'value':!![]});const axios_1=require('axios'),cheerio_1=require('cheerio');async function search(_0x4ec173,_0x2bd628,_0xce4362){const _0x1ddb23=_0x25ab3b,_0x2e1586={'TLETA':function(_0x1a9fa0,_0x3d82cf){return _0x1a9fa0(_0x3d82cf);},'VvzDz':function(_0x129c41,_0x5cfba6){return _0x129c41(_0x5cfba6);},'yECOo':function(_0x333997,_0x4b3e22){return _0x333997(_0x4b3e22);},'owTKm':_0x1ddb23(0x1c1),'lNlXU':function(_0x1815a7,_0x3cfae2){return _0x1815a7!==_0x3cfae2;},'yHmag':function(_0x58e33d,_0xdb9e8f){return _0x58e33d(_0xdb9e8f);}};if(_0x2e1586[_0x1ddb23(0x1cb)](_0xce4362,_0x1ddb23(0x1ba)))return;const _0x26de68=(await axios_1['default']['get'](_0x1ddb23(0x1c2),{'params':{'name':_0x4ec173,'type':'song'}}))[_0x1ddb23(0x1c8)],_0x80e038=(0x0,cheerio_1['load'])(_0x26de68),_0xe1f37f=_0x2e1586['yHmag'](_0x80e038,'.table.table-striped\\x20>\\x20tbody'),_0x4b6b40=_0xe1f37f['children']('tr'),_0x4b36a3=_0x4b6b40['map']((_0x1f082d,_0x4c344a)=>{const _0x543df0=_0x1ddb23,_0x12b4c=_0x2e1586['TLETA'](_0x80e038,_0x4c344a)[_0x543df0(0x1c7)](),_0x2c2ca7=_0x2e1586[_0x543df0(0x1b9)](_0x80e038,_0x12b4c['get'](0x0))[_0x543df0(0x1c3)]()[_0x543df0(0x1bc)](),_0x1d45bd=_0x80e038(_0x12b4c[_0x543df0(0x1c4)](0x1))[_0x543df0(0x1c3)]()[_0x543df0(0x1bc)](),_0x34dca7=_0x2e1586['yECOo'](_0x80e038,_0x12b4c['get'](0x2))[_0x543df0(0x1c3)]()['trim'](),_0x231e66=_0x80e038(_0x12b4c['get'](0x3))[_0x543df0(0x1c7)]('a')['attr'](_0x2e1586['owTKm']);return{'title':_0x2c2ca7,'artist':_0x1d45bd,'album':_0x34dca7,'id':_0x231e66};})[_0x1ddb23(0x1c6)]();return{'isEnd':!![],'data':_0x4b36a3};}async function getLyric(_0x41c392){const _0x3ead91=_0x25ab3b,_0x1c2f99=(await axios_1[_0x3ead91(0x1b7)]['get'](_0x41c392['id']))['data'],_0x30dfbf=(0x0,cheerio_1['load'])(_0x1c2f99),_0x5b5f3d=_0x30dfbf(_0x3ead91(0x1b4))['text']()[_0x3ead91(0x1bd)](/\\n/g,'');return{'rawLrc':_0x5b5f3d};}module['exports']={'platform':_0x25ab3b(0x1b5),'version':'0.1.7','author':_0x25ab3b(0x1b3),'srcUrl':_0x25ab3b(0x1be),'cacheControl':_0x25ab3b(0x1bf),'supportedSearchType':[_0x25ab3b(0x1ba)],'search':search,'getLyric':getLyric};", "id": "msg_1789568507463"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 碳酸歌词, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568507463: True [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 碳酸歌词 [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDav_lrc [2026-09-16 22:21:47] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Failed to load plugin WebDav_lrc: Module 'webdav' is not allowed or not installed [2026-09-16 22:21:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "WebDav_lrc", "code": "/*\n * \u57fa\u4e8e [https://gitee.com/maotoumao/MusicFreePlugins] \u4fee\u6539\n * \u539f\u59cb\u7248\u6743: [\u732b\u5934\u732b]\n * \u4fee\u6539\u8bf4\u660e: \u65b0\u589eWebDAV\u652f\u6301\u6b4c\u8bcd\u663e\u793a\uff0c\u6b4c\u8bcd\u540d\u548c\u6b4c\u66f2\u540d\u9700\u8981\u76f8\u540c\n * \n * \u672c\u7a0b\u5e8f\u662f\u81ea\u7531\u8f6f\u4ef6\uff0c\u9075\u5faaGPLv3\u8bb8\u53ef\n */\n\n\n\"use strict\";\n\nconst { createClient, AuthType } = require(\"webdav\");\n\n// \u7f13\u5b58WebDAV\u5ba2\u6237\u7aef\u548c\u6587\u4ef6\u5217\u8868\nlet cachedData = {\n client: null,\n url: null,\n username: null,\n password: null,\n searchPath: null,\n searchPathList: null,\n cacheFileList: null,\n lastFetchTime: 0,\n lyric: {}\n};\n\n// \u7f13\u5b58\u6709\u6548\u671f\uff081\u5c0f\u65f6\uff09\nconst CACHE_TTL = 60 * 60 * 1000;\n\n/**\n * \u83b7\u53d6\u6216\u521b\u5efaWebDAV\u5ba2\u6237\u7aef\n * \u901a\u8fc7\u7f13\u5b58\u907f\u514d\u91cd\u590d\u521b\u5efa\u8fde\u63a5\n */\nfunction getClient() {\n // \u4ece\u73af\u5883\u53d8\u91cf\u83b7\u53d6\u914d\u7f6e\n const userVars = env.getUserVariables ? env.getUserVariables() : (env.userVariables || {});\n const { url, username, password, searchPath } = userVars;\n\n // \u9a8c\u8bc1\u5fc5\u8981\u914d\u7f6e\n if (!url || !username || !password) {\n console.error(\"WebDAV\u914d\u7f6e\u4e0d\u5b8c\u6574\");\n return null;\n }\n\n // \u68c0\u67e5\u914d\u7f6e\u662f\u5426\u53d8\u66f4\uff0c\u5982\u53d8\u66f4\u5219\u6e05\u9664\u7f13\u5b58\n const configChanged = (\n cachedData.url !== url ||\n cachedData.username !== username ||\n cachedData.password !== password ||\n cachedData.searchPath !== searchPath\n );\n\n if (configChanged || !cachedData.client) {\n // \u66f4\u65b0\u7f13\u5b58\u6570\u636e\n cachedData = {\n client: null,\n url,\n username,\n password,\n searchPath: searchPath || null,\n searchPathList: searchPath ? searchPath.split(\",\").map(path => path.trim()).filter(Boolean) : ['/'],\n cacheFileList: null,\n lastFetchTime: 0\n };\n\n // \u521b\u5efa\u65b0\u7684WebDAV\u5ba2\u6237\u7aef\n try {\n cachedData.client = createClient(url, {\n authType: AuthType.Password,\n username,\n password\n });\n } catch (error) {\n console.error(\"\u521b\u5efaWebDAV\u5ba2\u6237\u7aef\u5931\u8d25:\", error);\n return null;\n }\n }\n\n return cachedData.client;\n}\n\n/**\n * \u83b7\u53d6\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u97f3\u9891\u6587\u4ef6\n * \u652f\u6301\u9012\u5f52\u641c\u7d22\u5b50\u76ee\u5f55\n */\nasync function getAudioFilesFromDirectory(client, path, recursive = true) {\n try {\n const items = await client.getDirectoryContents(path);\n const audioFiles = [];\n\n for (const item of items) {\n if (item.type === \"directory\" && recursive) {\n // \u9012\u5f52\u641c\u7d22\u5b50\u76ee\u5f55\n const subDirFiles = await getAudioFilesFromDirectory(client, item.filename, recursive);\n audioFiles.push(...subDirFiles);\n } else if (item.type === \"file\" && item.mime && item.mime.startsWith(\"audio\")) {\n audioFiles.push(item);\n }\n }\n\n return audioFiles;\n } catch (error) {\n console.error(`\u83b7\u53d6\u76ee\u5f55 ${path} \u5185\u5bb9\u5931\u8d25:`, error);\n return [];\n }\n}\n\n/**\n * \u641c\u7d22\u97f3\u4e50\n * \u901a\u8fc7\u7f13\u5b58\u4f18\u5316\u91cd\u590d\u641c\u7d22\u6027\u80fd\n */\nasync function searchMusic(query) {\n const client = getClient();\n if (!client) {\n return { isEnd: true, data: [] };\n }\n\n const now = Date.now();\n const cacheExpired = now - cachedData.lastFetchTime > CACHE_TTL;\n\n // \u5982\u679c\u7f13\u5b58\u4e3a\u7a7a\u6216\u5df2\u8fc7\u671f\uff0c\u91cd\u65b0\u83b7\u53d6\u6587\u4ef6\u5217\u8868\n if (!cachedData.cacheFileList || cachedData.cacheFileList.length === 0 || cacheExpired) {\n const searchPaths = cachedData.searchPathList && cachedData.searchPathList.length > 0\n ? cachedData.searchPathList\n : ['/'];\n\n const filePromises = searchPaths.map(path =>\n getAudioFilesFromDirectory(client, path, true)\n );\n\n try {\n const results = await Promise.allSettled(filePromises);\n cachedData.cacheFileList = results\n .filter(result => result.status === \"fulfilled\")\n .flatMap(result => result.value);\n cachedData.lastFetchTime = now;\n } catch (error) {\n console.error(\"\u83b7\u53d6\u97f3\u9891\u6587\u4ef6\u5217\u8868\u5931\u8d25:\", error);\n cachedData.cacheFileList = [];\n }\n }\n\n // \u5982\u679c\u6ca1\u6709\u67e5\u8be2\u5173\u952e\u8bcd\uff0c\u8fd4\u56de\u6240\u6709\u6587\u4ef6\n if (!query || query.trim() === \"\") {\n return {\n isEnd: true,\n data: (cachedData.cacheFileList || []).map(file => ({\n title: file.basename || \"\u672a\u77e5\u6b4c\u66f2\",\n id: file.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\"\n }))\n };\n }\n\n // \u6839\u636e\u5173\u952e\u8bcd\u8fc7\u6ee4\n const searchTerm = query.toLowerCase();\n const filteredFiles = (cachedData.cacheFileList || [])\n .filter(file => {\n if (!file.basename) return false;\n return file.basename.toLowerCase().includes(searchTerm);\n })\n .map(file => ({\n title: file.basename,\n id: file.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\"\n }));\n\n return {\n isEnd: true,\n data: filteredFiles\n };\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u5355\u5217\u8868\n */\nasync function getTopLists() {\n getClient(); // \u786e\u4fdd\u5ba2\u6237\u7aef\u521d\u59cb\u5316\n const searchPaths = cachedData.searchPathList || ['/'];\n\n return [{\n title: \"\u5168\u90e8\u6b4c\u66f2\",\n data: searchPaths.map(path => ({\n title: path,\n id: path\n }))\n }];\n}\n\n/**\n * \u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\n */\nasync function getTopListDetail(topListItem) {\n const client = getClient();\n if (!client || !topListItem || !topListItem.id) {\n return { musicList: [] };\n }\n\n try {\n const fileItems = await getAudioFilesFromDirectory(client, topListItem.id, false);\n\n return {\n musicList: fileItems.map(item => ({\n title: item.basename || \"\u672a\u77e5\u6b4c\u66f2\",\n id: item.filename,\n artist: \"\u672a\u77e5\u4f5c\u8005\",\n album: \"\u672a\u77e5\u4e13\u8f91\"\n }))\n };\n } catch (error) {\n console.error(`\u83b7\u53d6\u6b4c\u5355\u8be6\u60c5\u5931\u8d25 ${topListItem.id}:`, error);\n return { musicList: [] };\n }\n}\n\n/**\n * \u83b7\u53d6\u5a92\u4f53\u6e90URL\n */\nfunction getMediaSource(musicItem) {\n const client = getClient();\n if (!client || !musicItem || !musicItem.id) {\n return { url: null };\n }\n\n try {\n return {\n url: client.getFileDownloadLink(musicItem.id)\n };\n } catch (error) {\n console.error(\"\u83b7\u53d6\u5a92\u4f53\u6e90URL\u5931\u8d25:\", error);\n return { url: null };\n }\n}\n\n/**\n * \u641c\u7d22\u51fd\u6570\uff08\u4e3b\u5165\u53e3\uff09\n */\nfunction search(query, page, type) {\n if (type === \"music\") {\n return searchMusic(query);\n }\n\n return Promise.resolve({ isEnd: true, data: [] });\n}\n\n\n// \u83b7\u53d6\u6b4c\u8bcd\nasync function getLyric(musicItem) {\n\n if (!musicItem || !musicItem.id) {\n return;\n }\n let content = cachedData[musicItem.id];\n if (content){\n return {\n rawLrc: content, // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n translation: content // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n }\n }\n const client = getClient();\n\n // \u540e\u7f00\u6362\u6210 .lrc\n let i = musicItem.id.lastIndexOf('.');\n let lrcPath = musicItem.id.substring(0, i) + '.lrc';\n\n try {\n // \u8bfb\u53d6\u6587\u4ef6\u5185\u5bb9\n const content = await client.getFileContents(lrcPath, {\n format: 'text'\n });\n\n cachedData[musicItem.id] = content;\n return {\n rawLrc: content, // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n translation: content // \u6587\u672c\u683c\u5f0f\u7684\u6b4c\u8bcd\n }\n\n } catch (error) {\n let path = lrcPath\n if (error && error.response && error.response.url){\n path = error.response.url\n }\n console.error(`\u8bfb\u53d6\u6587\u4ef6\u5931\u8d25 ${path}:`, error);\n }\n}\n\n\n// \u5bfc\u51fa\u6a21\u5757\nmodule.exports = {\n platform: \"WebDAV\",\n author: \"mcck\",\n description: \"\u4f7f\u7528\u6b64\u63d2\u4ef6\u524d\u5148\u914d\u7f6e\u7528\u6237\u53d8\u91cf\",\n userVariables: [\n {\n key: \"url\",\n name: \"WebDAV\u5730\u5740\",\n hint: \"\u4f8b\u5982: https://example.com/dav\"\n },\n {\n key: \"username\",\n name: \"\u7528\u6237\u540d\"\n },\n {\n key: \"password\",\n name: \"\u5bc6\u7801\",\n type: \"password\"\n },\n {\n key: \"searchPath\",\n name: \"\u5b58\u653e\u6b4c\u66f2\u7684\u8def\u5f84\",\n hint: \"\u591a\u4e2a\u8def\u5f84\u7528\u9017\u53f7\u5206\u9694\uff0c\u4f8b\u5982: /Music,/Audio\"\n }\n ],\n version: \"0.1.2\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/mcck-tools/other/raw/master/musicfree/webdav.js\",\n // srcUrl: \"http://172.88.0.47:5500/webdav.js\",\n cacheControl: \"no-cache\",\n\n // \u4e3b\u529f\u80fd\u63a5\u53e3\n search,\n getTopLists,\n getTopListDetail,\n getMediaSource,\n getLyric\n};", "id": "msg_1789568507764"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:47] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [JS_PLUGIN_RUNNER] Action load failed: Module 'webdav' is not allowed or not installed [2026-09-16 22:21:47] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: WebDav_lrc, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568507764: False [2026-09-16 22:21:48] [0.6.1] [ERROR] js_plugin_manager.py:987: Failed to load JS plugin WebDav_lrc: Module 'webdav' is not allowed or not installed [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u7f51\u6613Ciallo\uff5e(\u2220\u30fb\u03c9_ )\u2312\u2606", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst CryptoJs = require(\"crypto-js\");\nconst qs = require(\"qs\");\nconst bigInt = require(\"big-integer\");\nconst dayjs = require(\"dayjs\");\nconst cheerio = require(\"cheerio\");\n\nfunction create_key() {\n var d,\n e,\n b = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\",\n c = \"\";\n for (d = 0; 16 > d; d += 1)\n (e = Math.random() * b.length), (e = Math.floor(e)), (c += b.charAt(e));\n return c;\n}\n\nfunction AES(a, b) {\n var c = CryptoJs.enc.Utf8.parse(b),\n d = CryptoJs.enc.Utf8.parse(\"0102030405060708\"),\n e = CryptoJs.enc.Utf8.parse(a),\n f = CryptoJs.AES.encrypt(e, c, {\n iv: d,\n mode: CryptoJs.mode.CBC,\n });\n return f.toString();\n}\n\nfunction Rsa(text) {\n text = text.split(\"\").reverse().join(\"\");\n const d = \"010001\";\n const e =\n \"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7\";\n const hexText = text\n .split(\"\")\n .map((_) => _.charCodeAt(0).toString(16))\n .join(\"\");\n const res = bigInt(hexText, 16)\n .modPow(bigInt(d, 16), bigInt(e, 16))\n .toString(16);\n return Array(256 - res.length)\n .fill(\"0\")\n .join(\"\")\n .concat(res);\n}\n\nfunction getParamsAndEnc(text) {\n const first = AES(text, \"0CoJUm6Qyw8W8jud\");\n const rand = create_key();\n const params = AES(first, rand);\n const encSecKey = Rsa(rand);\n return {\n params,\n encSecKey,\n };\n}\n\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d;\n const album = _.al || _.album;\n return {\n id: _.id,\n artwork: album === null || album === void 0 ? void 0 : album.picUrl,\n title: _.name,\n artist: (_.ar || _.artists)[0].name,\n album: album === null || album === void 0 ? void 0 : album.name,\n url: `https://share.duanx.cn/url/wy/${_.id}/128k`,\n qualities: {\n low: {\n size: (_a = _.l || {}) === null || _a === void 0 ? void 0 : _a.size,\n },\n standard: {\n size: (_b = _.m || {}) === null || _b === void 0 ? void 0 : _b.size,\n },\n high: {\n size: (_c = _.h || {}) === null || _c === void 0 ? void 0 : _c.size,\n },\n super: {\n size: (_d = _.sq || {}) === null || _d === void 0 ? void 0 : _d.size,\n },\n },\n copyrightId: _ === null || _ === void 0 ? void 0 : _.copyrightId,\n };\n}\n\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.artist.name,\n title: _.name,\n artwork: _.picUrl,\n description: \"\",\n date: dayjs.unix(_.publishTime / 1000).format(\"YYYY-MM-DD\"),\n };\n}\n\nconst pageSize = 30;\nasync function searchBase(query, page, type) {\n const data = {\n s: query,\n limit: pageSize,\n type: type,\n offset: (page - 1) * pageSize,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/search/get\",\n headers,\n data: paeData,\n })\n ).data;\n return res;\n}\n\nasync function searchMusic(query, page) {\n const res = await searchBase(query, page, 1);\n const songs = res.result.songs.map(formatMusicItem);\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: songs,\n };\n}\n\nasync function searchAlbum(query, page) {\n const res = await searchBase(query, page, 10);\n const albums = res.result.albums.map(formatAlbumItem);\n return {\n isEnd: res.result.albumCount <= page * pageSize,\n data: albums,\n };\n}\n\nasync function searchArtist(query, page) {\n const res = await searchBase(query, page, 100);\n const artists = res.result.artists.map((_) => ({\n name: _.name,\n id: _.id,\n avatar: _.img1v1Url,\n worksNum: _.albumSize,\n }));\n return {\n isEnd: res.result.artistCount <= page * pageSize,\n data: artists,\n };\n}\n\nasync function searchMusicSheet(query, page) {\n const res = await searchBase(query, page, 1000);\n const playlists = res.result.playlists.map((_) => {\n var _a;\n return {\n title: _.name,\n id: _.id,\n coverImg: _.coverImgUrl,\n artist: (_a = _.creator) === null || _a === void 0 ? void 0 : _a.nickname,\n playCount: _.playCount,\n worksNum: _.trackCount,\n };\n });\n return {\n isEnd: res.result.playlistCount <= page * pageSize,\n data: playlists,\n };\n}\n\nasync function searchLyric(query, page) {\n var _a, _b;\n const res = await searchBase(query, page, 1006);\n const lyrics =\n (_b =\n (_a = res.result.songs) === null || _a === void 0\n ? void 0\n : _a.map((it) => {\n var _a, _b, _c, _d;\n return {\n title: it.name,\n artist:\n (_a = it.ar) === null || _a === void 0\n ? void 0\n : _a.map((_) => _.name).join(\", \"),\n id: it.id,\n artwork:\n (_b = it.al) === null || _b === void 0 ? void 0 : _b.picUrl,\n album: (_c = it.al) === null || _c === void 0 ? void 0 : _c.name,\n rawLrcTxt:\n (_d = it.lyrics) === null || _d === void 0\n ? void 0\n : _d.join(\"\\n\"),\n };\n })) !== null && _b !== void 0\n ? _b\n : [];\n return {\n isEnd: res.result.songCount <= page * pageSize,\n data: lyrics,\n };\n}\n\nasync function getArtistWorks(artistItem, page, type) {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/search/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n };\n if (type === \"music\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/v1/artist/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotSongs.map(formatMusicItem),\n };\n } else if (type === \"album\") {\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://music.163.com/weapi/artist/albums/${artistItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n isEnd: true,\n data: res.hotAlbums.map(formatAlbumItem),\n };\n }\n}\n\nasync function getTopListDetail(topListItem) {\n const musicList = await getSheetMusicById(topListItem.id);\n return Object.assign(Object.assign({}, topListItem), { musicList });\n}\n\nasync function getLyric(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, lv: -1, tv: -1, csrf_token: \"\" };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const result = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/song/lyric?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n rawLrc: result.lrc.lyric,\n };\n}\n\nasync function getMusicInfo(musicItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = { id: musicItem.id, ids: `[${musicItem.id}]` };\n const result = (\n await axios_1.get(\"http://music.163.com/api/song/detail\", {\n headers,\n params: data,\n })\n ).data;\n return {\n artwork: result.songs[0].album.picUrl,\n };\n}\n\nasync function getAlbumInfo(albumItem) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n const data = {\n resourceType: 3,\n resourceId: albumItem.id,\n limit: 15,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: `https://interface.music.163.com/weapi/v1/album/${albumItem.id}?csrf_token=`,\n headers,\n data: paeData,\n })\n ).data;\n return {\n albumItem: { description: res.album.description },\n musicList: (res.songs || []).map(formatMusicItem),\n };\n}\n\nasync function getValidMusicItems(trackIds) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n };\n try {\n const res = (\n await axios_1.default.get(\n `https://music.163.com/api/song/detail/?ids=[${trackIds.join(\",\")}]`,\n { headers }\n )\n ).data;\n const validMusicItems = res.songs.map(formatMusicItem);\n return validMusicItems;\n } catch (e) {\n console.error(e);\n return [];\n }\n}\n\nasync function getSheetMusicById(id) {\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n const trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n let result = [];\n let idx = 0;\n while (idx * 200 < trackIds.length) {\n const res = await getValidMusicItems(\n trackIds.slice(idx * 200, (idx + 1) * 200)\n );\n result = result.concat(res);\n ++idx;\n }\n return result;\n}\n\nasync function importMusicSheet(urlLike) {\n const matchResult = urlLike.match(\n /(?:https:\\/\\/y\\.music\\.163.com\\/m\\/playlist\\?id=([0-9]+))|(?:https?:\\/\\/music\\.163\\.com\\/playlist\\/([0-9]+)\\/.*)|(?:https?:\\/\\/music.163.com(?:\\/#)?\\/playlist\\?id=(\\d+))|(?:^\\s*(\\d+)\\s*$)/\n );\n const id =\n matchResult[1] || matchResult[2] || matchResult[3] || matchResult[4];\n return getSheetMusicById(id);\n}\n\nasync function getTopLists() {\n const res = await axios_1.default.get(\n \"https://music.163.com/discover/toplist\",\n {\n headers: {\n referer: \"https://music.163.com/\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54\",\n },\n }\n );\n const $ = cheerio.load(res.data);\n const children = $(\".n-minelst\").children();\n const groups = [];\n let currentGroup = {};\n for (let c of children) {\n if (c.tagName == \"h2\") {\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n currentGroup = {};\n currentGroup.title = $(c).text();\n currentGroup.data = [];\n } else if (c.tagName === \"ul\") {\n let sections = $(c).children();\n currentGroup.data = sections\n .map((index, element) => {\n const ele = $(element);\n const id = ele.attr(\"data-res-id\");\n const coverImg = ele\n .find(\"img\")\n .attr(\"src\")\n .replace(/(\\.jpg\\?).*/, \".jpg?param=800y800\");\n const title = ele.find(\"p.name\").text();\n const description = ele.find(\"p.s-fc4\").text();\n return {\n id,\n coverImg,\n title,\n description,\n };\n })\n .toArray();\n }\n }\n if (currentGroup.title) {\n groups.push(currentGroup);\n }\n return groups;\n}\n\nasync function getMediaSource(musicItem, quality) {\n const API_BASE = 'https://api.s0o1.com/API/wyy_music';\n \n const yzMap = {\n 'low': '1',\n 'standard': '2',\n 'high': '3',\n 'super': '4'\n };\n \n const yz = yzMap[quality] || '7';\n const apiUrl = `${API_BASE}?id=${musicItem.id}&yz=${yz}`;\n \n try {\n const response = await axios_1.default.get(apiUrl, {\n timeout: 8000\n });\n \n const data = response.data;\n if (data.status === 200 && data.success && data.data && data.data.url) {\n return {\n url: data.data.url,\n };\n } else {\n throw new Error('\u83b7\u53d6\u97f3\u9891\u5730\u5740\u5931\u8d25');\n }\n } catch (error) {\n throw new Error('\u7f51\u7edc\u8bf7\u6c42\u5931\u8d25');\n }\n}\n\nconst headers = {\n authority: \"music.163.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"*/*\",\n origin: \"https://music.163.com\",\n \"sec-fetch-site\": \"same-origin\",\n \"sec-fetch-mode\": \"cors\",\n \"sec-fetch-dest\": \"empty\",\n referer: \"https://music.163.com/\",\n \"accept-language\": \"zh-CN,zh;q=0.9\",\n};\n\nasync function getRecommendSheetTags() {\n const data = {\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/catalogue\",\n headers,\n data: paeData,\n })\n ).data;\n const cats = res.categories;\n const map = {};\n const catData = Object.entries(cats).map((_) => {\n const tagData = {\n title: _[1],\n data: [],\n };\n map[_[0]] = tagData;\n return tagData;\n });\n const pinned = [];\n res.sub.forEach((tag) => {\n const _tag = {\n id: tag.name,\n title: tag.name,\n };\n if (tag.hot) {\n pinned.push(_tag);\n }\n map[tag.category].data.push(_tag);\n });\n return {\n pinned,\n data: catData,\n };\n}\n\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const data = {\n cat: tag.id || \"\u5168\u90e8\",\n order: \"hot\",\n limit: pageSize,\n offset: (page - 1) * pageSize,\n total: true,\n csrf_token: \"\",\n };\n const pae = getParamsAndEnc(JSON.stringify(data));\n const paeData = qs.stringify(pae);\n const res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: \"https://music.163.com/weapi/playlist/list\",\n headers,\n data: paeData,\n })\n ).data;\n const playLists = res.playlists.map((_) => ({\n id: _.id,\n artist: _.creator.nickname,\n title: _.name,\n artwork: _.coverImgUrl,\n playCount: _.playCount,\n createUserId: _.userId,\n createTime: _.createTime,\n description: _.description,\n }));\n return {\n isEnd: !(res.more === true),\n data: playLists,\n };\n}\n\nasync function getMusicSheetInfo(sheet, page) {\n let trackIds = sheet._trackIds;\n if (!trackIds) {\n const id = sheet.id;\n const headers = {\n Referer: \"https://y.music.163.com/\",\n Origin: \"https://y.music.163.com/\",\n authority: \"music.163.com\",\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36\",\n };\n const sheetDetail = (\n await axios_1.default.get(\n `https://music.163.com/api/v3/playlist/detail?id=${id}&n=5000`,\n {\n headers,\n }\n )\n ).data;\n trackIds = sheetDetail.playlist.trackIds.map((_) => _.id);\n }\n const pageSize = 40;\n const currentPageIds = trackIds.slice((page - 1) * pageSize, page * pageSize);\n const res = await getValidMusicItems(currentPageIds);\n let extra = {};\n if (page <= 1) {\n extra = {\n _trackIds: trackIds,\n };\n }\n return Object.assign(\n { isEnd: trackIds.length <= page * pageSize, musicList: res },\n extra\n );\n}\n\nmodule.exports = {\n platform: \"Ciallo\uff5e(\u2220\u30fb\u03c9< )\u2312\u2606(\u4ec5\u7f51\u6613)\",\n author: \"\u73a5\u7136OvO\",\n version: \"1.0721\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E7%BD%91%E6%98%93Ciallo~(%E2%88%A0%E3%83%BB%CF%89_%20)%E2%8C%92%E2%98%86.js\",\n cacheControl: \"no-store\",\n hints: {\n importMusicSheet: [\n \"\u7f51\u6613\u4e91\uff1aAPP\u70b9\u51fb\u5206\u4eab\uff0c\u7136\u540e\u590d\u5236\u94fe\u63a5\",\n \"\u9ed8\u8ba4\u6b4c\u5355\u65e0\u6cd5\u5bfc\u5165\uff0c\u5148\u65b0\u5efa\u4e00\u4e2a\u7a7a\u767d\u6b4c\u5355\u590d\u5236\u8fc7\u53bb\u518d\u5bfc\u5165\u65b0\u6b4c\u5355\u5373\u53ef\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n getMediaSource,\n getMusicInfo,\n getAlbumInfo,\n getLyric,\n getArtistWorks,\n importMusicSheet,\n getTopLists,\n getTopListDetail,\n getRecommendSheetTags,\n getMusicSheetInfo,\n getRecommendSheetsByTag,\n};", "id": "msg_1789568508067"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 网易Ciallo~(∠・ω_ )⌒☆, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568508067: True [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 网易Ciallo~(∠・ω_ )⌒☆ [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 猫耳FM [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u732b\u8033FM", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 30;\nfunction validMusicFilter(_) {\n return `${_.pay_type}` === \"0\";\n}\nfunction formatMusicItem(_) {\n var _a;\n return {\n id: _.id,\n artwork: _.front_cover,\n title: _.soundstr,\n artist: _.username,\n user_id: _.user_id,\n duration: +((_a = _.duration) !== null && _a !== void 0 ? _a : 0),\n };\n}\nfunction formatAlbumItem(_) {\n return {\n id: _.id,\n artist: _.author,\n title: _.name,\n artwork: _.cover,\n description: _.abstract,\n };\n}\nconst searchHeaders = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: \"https://www.missevan.com/sound/search\",\n};\nasync function searchMusic(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsearch\", {\n params: {\n s: query,\n p: page,\n type: 3,\n page_size: pageSize,\n },\n headers: searchHeaders,\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/search\", {\n headers: searchHeaders,\n params: {\n s: query,\n page,\n },\n })).data.info;\n return {\n isEnd: res.pagination.p >= res.pagination.maxpage,\n data: res.Datas.filter(validMusicFilter).map(formatAlbumItem),\n };\n}\nasync function getAlbumInfo(albumItem) {\n const res = (await axios_1.default.get(\"https://www.missevan.com/dramaapi/getdrama\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/mdrama/${albumItem.id}`,\n },\n params: {\n drama_id: albumItem.id,\n },\n })).data;\n return {\n musicList: res.info.episodes.episode\n .filter(validMusicFilter)\n .map(_ => {\n const r = formatMusicItem(_);\n r.artwork = albumItem.artwork;\n return r;\n }),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality === \"high\" || quality === \"super\") {\n return;\n }\n const res = (await axios_1.default.get(\"https://www.missevan.com/sound/getsound\", {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com/sound/player?id=${musicItem.id}`,\n },\n params: {\n soundid: musicItem.id,\n },\n })).data.info;\n if (quality === \"low\") {\n return {\n url: res.sound.soundurl_128,\n };\n }\n else {\n return {\n url: res.sound.soundurl,\n };\n }\n}\nasync function getRecommendSheetTags() {\n const res = (await axios_1.default.get(`https://www.missevan.com/malbum/recommand`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://www.missevan.com`,\n }\n })).data.info;\n const data = Object.entries(res !== null && res !== void 0 ? res : {}).map(group => ({\n title: group[0],\n data: group[1].map(_ => ({\n id: _[0],\n title: _[1]\n }))\n }));\n return {\n data,\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/explore/tagalbum`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n order: 0,\n tid: (tag === null || tag === void 0 ? void 0 : tag.id) || 0,\n p: page\n }\n })).data;\n return {\n isEnd: res.page >= res.maxpage,\n data: res.albums.map(sheet => ({\n id: sheet.id,\n title: sheet.title,\n artwork: sheet.front_cover,\n artist: sheet.username,\n createUserId: sheet.user_id\n }))\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const res = (await axios_1.default.get(`https://www.missevan.com/sound/soundalllist`, {\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n accept: \"application/json\",\n \"accept-encoding\": \"gzip, deflate, br\",\n referer: `https://m.missevan.com`,\n },\n params: {\n albumid: sheet.id\n }\n })).data.info;\n return {\n isEnd: true,\n musicList: res.sounds.filter(validMusicFilter).map(item => ({\n id: item.id,\n title: item.soundstr,\n artwork: item.front_cover,\n url: item.soundurl,\n artist: item.username,\n }))\n };\n}\nmodule.exports = {\n platform: \"\u732b\u8033FM\",\n author: '\u732b\u5934\u732b',\n version: \"0.1.4\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/maoerfm/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\", \"album\",],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getMusicSheetInfo\n};", "id": "msg_1789568508368"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 猫耳FM, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568508368: True [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 猫耳FM [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789568508669"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:48] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568508669: True [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 迟言QQ [2026-09-16 22:21:48] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u8fdf\u8a00QQ", "code": "var $fFvhi$axios = require(\"axios\");\nvar $fFvhi$cryptojs = require(\"crypto-js\");\nvar $fFvhi$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $d25ff3d008f9e7e0$export$2e2bcd8739ae039);\n\n\n\nconst $d25ff3d008f9e7e0$var$pageSize = 20;\nfunction $d25ff3d008f9e7e0$var$formatMusicItem(_) {\n var _a, _b, _c;\n const albumid = _.albumid || ((_a = _.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid = _.albummid || ((_b = _.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname = _.albumname || ((_c = _.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: _.id || _.songid,\n songmid: _.mid || _.songmid,\n title: _.title || _.songname,\n artist: _.singer.map((s)=>s.name).join(\", \"),\n artwork: albummid ? `https://y.gtimg.cn/music/photo_new/T002R800x800M000${albummid}.jpg` : undefined,\n album: albumname,\n lrc: _.lyric || undefined,\n albumid: albumid,\n albummid: albummid\n };\n}\nfunction $d25ff3d008f9e7e0$var$formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork: _.albumPic || `https://y.gtimg.cn/music/photo_new/T002R800x800M000${_.albumMID || _.album_mid}.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc\n };\n}\nfunction $d25ff3d008f9e7e0$var$formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum\n };\n}\nconst $d25ff3d008f9e7e0$var$searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\"\n};\nconst $d25ff3d008f9e7e0$var$headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\"\n};\nasync function $d25ff3d008f9e7e0$var$searchBase(query, page, type) {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: $d25ff3d008f9e7e0$var$pageSize,\n page_num: page,\n query: query,\n search_type: type\n }\n }\n },\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.req_1.data.body[$d25ff3d008f9e7e0$var$searchTypeMap[type]].list\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchMusic(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchAlbum(query, page) {\n const albums = await $d25ff3d008f9e7e0$var$searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchArtist(query, page) {\n const artists = await $d25ff3d008f9e7e0$var$searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map($d25ff3d008f9e7e0$var$formatArtistItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchMusicSheet(query, page) {\n const musicSheet = await $d25ff3d008f9e7e0$var$searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item)=>({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name\n }))\n };\n}\nasync function $d25ff3d008f9e7e0$var$searchLyric(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it)=>Object.assign(Object.assign({}, $d25ff3d008f9e7e0$var$formatMusicItem(it)), {\n rawLrcTxt: it.content\n }))\n };\n}\nfunction $d25ff3d008f9e7e0$var$getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) s = sArr[1];\n else return key ? undefined : {};\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item)=>{\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n } catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction $d25ff3d008f9e7e0$var$changeUrlQuery(obj, baseUrl) {\n const query = $d25ff3d008f9e7e0$var$getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key)=>{\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst $d25ff3d008f9e7e0$var$typeMap = {\n m4a: {\n s: \"C400\",\n e: \".m4a\"\n },\n 128: {\n s: \"M500\",\n e: \".mp3\"\n },\n 320: {\n s: \"M800\",\n e: \".mp3\"\n },\n ape: {\n s: \"A000\",\n e: \".ape\"\n },\n flac: {\n s: \"F000\",\n e: \".flac\"\n }\n};\nasync function $d25ff3d008f9e7e0$var$getAlbumInfo(albumItem) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2\n },\n module: \"music.musichallAlbum.AlbumSongList\"\n }\n })\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n musicList: res.albumSonglist.data.songList.map((item)=>{\n const _ = item.songInfo;\n return $d25ff3d008f9e7e0$var$formatMusicItem(_);\n })\n };\n}\nasync function $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singer.data.total_song <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singer.data.songlist.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize / 1,\n exstatus: 1\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singerAlbum.data.list.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\nasync function $d25ff3d008f9e7e0$var$getArtistWorks(artistItem, page, type) {\n if (type === \"music\") return $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page);\n if (type === \"album\") return $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page);\n}\nasync function $d25ff3d008f9e7e0$var$getLyric(musicItem) {\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid}&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: {\n Referer: \"https://y.qq.com\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n let translation;\n if (res.trans) translation = (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.trans).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8));\n return {\n rawLrc: (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.lyric).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8)),\n translation: translation\n };\n}\nasync function $d25ff3d008f9e7e0$var$importMusicSheet(urlLike) {\n let id;\n if (!id) id = (urlLike.match(/https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id) return;\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://i.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: {\n Referer: \"https://y.qq.com/n/yqq/playlist\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n return res.cdlist[0].songlist.map($d25ff3d008f9e7e0$var$formatMusicItem);\n}\nasync function $d25ff3d008f9e7e0$var$getTopLists() {\n const list = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return list.data.topList.data.group.map((e)=>({\n title: e.groupName,\n data: e.toplist.map((_)=>({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl\n }))\n }));\n}\nasync function $d25ff3d008f9e7e0$var$getTopListDetail(topListItem) {\n var _a;\n const res = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id}%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"}%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList.map($d25ff3d008f9e7e0$var$formatMusicItem)\n });\n}\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetTags() {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\", {\n headers: {\n referer: \"https://y.qq.com/\"\n }\n })).data.data.categories;\n const data = res.slice(1).map((_)=>({\n title: _.categoryGroupName,\n data: _.items.map((tag)=>({\n id: tag.categoryId,\n title: tag.categoryName\n }))\n }));\n const pinned = [];\n for (let d of data)if (d.data.length) pinned.push(d.data[0]);\n return {\n pinned: pinned,\n data: data\n };\n}\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\", {\n headers: {\n referer: \"https://y.qq.com/\"\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId: (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1\n }\n })).data;\n const res = JSON.parse(rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item)=>{\n var _a, _b;\n return {\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist: (_b = (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"\"\n };\n });\n return {\n isEnd: isEnd,\n data: data\n };\n}\nasync function $d25ff3d008f9e7e0$var$getMusicSheetInfo(sheet, page) {\n const data = await $d25ff3d008f9e7e0$var$importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getMediaSource(musicItem, quality) {\n const apiUrl = `https://cyapi.top/API/qq_music.php?apikey=1ffdf5733f5d538760e63d7e46ba17438d9f7b9dfc18c51be1109386fd74c3a1&type=json&mid=${musicItem.songmid}`;\n \n try {\n const response = await (0, ($parcel$interopDefault($fFvhi$axios))).get(apiUrl, {\n headers: {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36',\n 'Referer': 'https://y.qq.com'\n },\n timeout: 10000\n });\n\n if (!response.data || !response.data.url) {\n throw new Error('API\u54cd\u5e94\u4e2d\u6ca1\u6709\u6709\u6548\u7684URL');\n }\n\n return {\n url: response.data.url\n };\n } catch (error) {\n console.error('\u83b7\u53d6\u97f3\u4e50URL\u5931\u8d25:', error.message);\n throw new Error(`\u83b7\u53d6\u64ad\u653e\u94fe\u63a5\u5931\u8d25: ${error.message}`);\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$search(query, page, type) {\n if (type === \"music\") return await $d25ff3d008f9e7e0$var$searchMusic(query, page);\n if (type === \"album\") return await $d25ff3d008f9e7e0$var$searchAlbum(query, page);\n if (type === \"artist\") return await $d25ff3d008f9e7e0$var$searchArtist(query, page);\n if (type === \"sheet\") return await $d25ff3d008f9e7e0$var$searchMusicSheet(query, page);\n if (type === \"lyric\") return await $d25ff3d008f9e7e0$var$searchLyric(query, page);\n}\nconst $d25ff3d008f9e7e0$var$pluginInstance = {\n platform: \"QQ(\u8fdf\u8a00\u63a5\u53e3)\",\n author: \"\u7af9\u4f40\",\n version: \"1\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E8%BF%9F%E8%A8%80QQ.js\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n primaryKey: [\n \"id\",\n \"songmid\"\n ],\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\",\n \"artist\",\n \"lyric\"\n ],\n search: $d25ff3d008f9e7e0$var$search,\n getMediaSource: $d25ff3d008f9e7e0$var$getMediaSource,\n getLyric: $d25ff3d008f9e7e0$var$getLyric,\n getAlbumInfo: $d25ff3d008f9e7e0$var$getAlbumInfo,\n getArtistWorks: $d25ff3d008f9e7e0$var$getArtistWorks,\n importMusicSheet: $d25ff3d008f9e7e0$var$importMusicSheet,\n getTopLists: $d25ff3d008f9e7e0$var$getTopLists,\n getTopListDetail: $d25ff3d008f9e7e0$var$getTopListDetail,\n getRecommendSheetTags: $d25ff3d008f9e7e0$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $d25ff3d008f9e7e0$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $d25ff3d008f9e7e0$var$getMusicSheetInfo\n};\nvar $d25ff3d008f9e7e0$export$2e2bcd8739ae039 = $d25ff3d008f9e7e0$var$pluginInstance;\n\n\n//# sourceMappingURL=xiaoqiu.js.map", "id": "msg_1789568508971"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 迟言QQ, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568508971: True [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 迟言QQ [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: udio [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "udio", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\",\n};\nfunction formatMusicItem(it) {\n return {\n id: it.id,\n artist: it.artist,\n title: it.title,\n createdAt: it.created_at,\n artwork: it.image_path,\n url: it.song_path,\n duration: it.duration,\n mv: it.video_path,\n rawLrc: it.lyrics,\n };\n}\nasync function searchMusic(query, page) {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"${query}\"},\"pageParam\":${page - 1},\"pageSize\":${pageSize},\"trendingId\":\"93de406e-bdc1-40a6-befd-90637a362158\"}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const result = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: result.length < pageSize,\n data: result.map(formatMusicItem),\n };\n}\nasync function search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n return musicItem.url;\n}\nasync function getTopLists() {\n return [\n {\n title: \"\u8d8b\u52bf\u699c\",\n data: [\n {\n id: \"today\",\n maxAgeInHours: 24,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5929\",\n },\n {\n id: \"1week\",\n maxAgeInHours: 168,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u5468\",\n },\n {\n id: \"1month\",\n maxAgeInHours: 720,\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u6700\u8fd1\u4e00\u6708\",\n },\n {\n id: \"alltime\",\n type: \"search\",\n title: \"\u8d8b\u52bf\u699c - \u5168\u90e8\u65f6\u95f4\",\n },\n ],\n },\n {\n title: \"\u6d41\u6d3e\u699c\u5355\",\n data: [\n {\n id: \"89f0089f-1bfe-4713-8070-5830a6161afb\",\n type: \"playlist\",\n title: \"\u7235\u58eb\",\n },\n {\n id: \"935deb12-dc32-4005-a1fe-3c00c284ca52\",\n type: \"playlist\",\n title: \"\u4e61\u6751\",\n },\n {\n id: \"6028ad08-68cb-406d-aa35-a4917b6467d6\",\n type: \"playlist\",\n title: \"\u6d41\u884c\",\n },\n {\n id: \"d033aa6e-655e-45d0-8138-dc9a0dc6b3a6\",\n type: \"playlist\",\n title: \"\u6447\u6eda\",\n },\n ],\n },\n ];\n}\nasync function getTopListDetail(topListItem) {\n if (topListItem.type === \"playlist\") {\n const res = (await axios_1.default.get(`https://www.udio.com/api/playlists?id=${topListItem.id}`, {\n headers,\n })).data;\n const songList = res.playlists[0].song_list.join(\",\");\n const songs = (await axios_1.default.get(`https://www.udio.com/api/songs?songIds=${songList}`, {\n headers,\n })).data.songs;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n else if (topListItem.type === \"search\") {\n const pageSize = 30;\n const data = `{\"searchQuery\":{\"sort\":\"plays\",\"searchTerm\":\"\"${topListItem.maxAgeInHours\n ? `,\"maxAgeInHours\": ${topListItem.maxAgeInHours}`\n : \"\"}},\"pageParam\":0,\"pageSize\":${pageSize}}`;\n const config = {\n method: \"post\",\n url: \"https://www.udio.com/api/songs/search\",\n headers: {\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.0.0\",\n host: \"www.udio.com\",\n },\n data: data,\n };\n const songs = (await (0, axios_1.default)(config)).data.data;\n return {\n isEnd: true,\n musicList: songs.map(formatMusicItem),\n };\n }\n}\nasync function getLyric(musicItem) {\n return {\n rawLrc: musicItem.rawLrc\n };\n}\nmodule.exports = {\n platform: \"udio\",\n author: \"\u732b\u5934\u732b\",\n version: \"0.0.0\",\n supportedSearchType: [\"music\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/udio/index.js\",\n cacheControl: \"no-cache\",\n search,\n getMediaSource,\n getTopListDetail,\n getTopLists,\n getLyric\n};", "id": "msg_1789568509273"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: udio, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568509273: True [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: udio [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗JHMS [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u72d7JHMS", "code": "const API_URL = \"https://api.music.lerd.dpdns.org\";\nconst UPDATE_URL = \"https://api.music.lerd.dpdns.org/mf/kg.js\";\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJs = require(\"crypto-js\");\nconst he = require(\"he\");\nconst pageSize = 20;\nfunction formatMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n return {\n id: (_d = _.FileHash) !== null && _d !== void 0 ? _d : _.Grp[0].FileHash,\n title: (_a = _.SongName) !== null && _a !== void 0 ? _a : _.OriSongName,\n artist:\n (_b = _.SingerName) !== null && _b !== void 0 ? _b : _.Singers[0].name,\n album:\n (_c = _.AlbumName) !== null && _c !== void 0 ? _c : _.Grp[0].AlbumName,\n album_id:\n (_e = _.AlbumID) !== null && _e !== void 0 ? _e : _.Grp[0].AlbumID,\n album_audio_id: 0,\n duration: _.Duration,\n artwork: ((_f = _.Image) !== null && _f !== void 0\n ? _f\n : _.Grp[0].Image\n ).replace(\"{size}\", \"1080\"),\n \"320hash\": (_i = _.HQFileHash) !== null && _i !== void 0 ? _i : undefined,\n sqhash: (_g = _.SQFileHash) !== null && _g !== void 0 ? _g : undefined,\n ResFileHash:\n (_h = _.ResFileHash) !== null && _h !== void 0 ? _h : undefined,\n };\n}\nfunction formatMusicItem2(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: _.hash,\n title: _.songname,\n artist:\n (_a = _.singername) !== null && _a !== void 0\n ? _a\n : ((_c =\n (_b = _.authors) === null || _b === void 0\n ? void 0\n : _b.map((_) => {\n var _a;\n return (_a =\n _ === null || _ === void 0 ? void 0 : _.author_name) !==\n null && _a !== void 0\n ? _a\n : \"\";\n })) === null || _c === void 0\n ? void 0\n : _c.join(\", \")) ||\n ((_f =\n (_e =\n (_d = _.filename) === null || _d === void 0\n ? void 0\n : _d.split(\"-\")) === null || _e === void 0\n ? void 0\n : _e[0]) === null || _f === void 0\n ? void 0\n : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover\n ? _.album_sizable_cover.replace(\"{size}\", \"400\")\n : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash,\n };\n}\nfunction formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) {\n title =\n (_a = title.substring(index + singerName.length + 2)) === null ||\n _a === void 0\n ? void 0\n : _a.trim();\n }\n if (!title) {\n title = singerName;\n }\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork:\n (_d =\n (_c = _ === null || _ === void 0 ? void 0 : _.info) === null ||\n _c === void 0\n ? void 0\n : _c.image) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n \"320hash\":\n (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) ===\n null || _e === void 0\n ? void 0\n : _e.hash,\n sqhash:\n (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) ===\n null || _f === void 0\n ? void 0\n : _f.hash,\n origin_hash:\n (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) ===\n null || _g === void 0\n ? void 0\n : _g.hash,\n };\n}\nconst headers = {\n \"User-Agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\",\n};\nasync function searchMusic(query, page) {\n const res = (\n await axios_1.default.get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers,\n params: {\n keyword: query,\n page,\n pagesize: pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1,\n },\n })\n ).data;\n const songs = res.data.lists.map(formatMusicItem);\n return {\n isEnd: page * pageSize >= res.data.total,\n data: songs,\n };\n}\nasync function searchAlbum(query, page) {\n const res = (\n await axios_1.default.get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page,\n sver: 2,\n with_res_tag: 0,\n },\n })\n ).data;\n const albums = res.data.info.map((_) => {\n var _a, _b;\n return {\n id: _.albumid,\n artwork:\n (_a = _.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, cheerio_1.load)(_.albumname).text(),\n description: _.intro,\n date:\n (_b = _.publishtime) === null || _b === void 0\n ? void 0\n : _b.slice(0, 10),\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums,\n };\n}\nasync function searchMusicSheet(query, page) {\n const res = (\n await axios_1.default.get(\n \"http://mobilecdn.kugou.com/api/v3/search/special\",\n {\n headers,\n params: {\n format: \"json\",\n keyword: query,\n page,\n pagesize: pageSize,\n showtype: 1,\n },\n }\n )\n ).data;\n const sheets = res.data.info.map((item) => ({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount,\n }));\n return {\n isEnd: page * pageSize >= res.data.total,\n data: sheets,\n };\n}\nconst qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"hires\",\n};\nasync function getMediaSource(musicItem, quality) {\n const res = (\n await (0, axios_1.default)({\n url: API_URL + \"/mf/kg\",\n method: \"POST\",\n data: JSON.stringify({\n musicItem: musicItem,\n quality: qualityLevels[quality],\n }),\n headers: {\n \"Content-Type\": \"application/json\",\n \"Accept\": \"application/json\",\n },\n })\n ).data;\n if (res.code == 200) {\n return res.data;\n }\n else if (res.code == 303) {\n const S = JSON.parse(JSON.stringify(res.data));\n const res2 = (\n await (0, axios_1.default)({\n url: encodeURI(S.request.url),\n ...S.request.options,\n })\n )\n const req = {\n status: res2.status,\n body: res2.data,\n headers: res2.headers,\n };\n if (S.response.check.key.reduce((acc, cur) => acc && acc[cur], req) == S.response.check.value) {\n const url = S.response.url.reduce((acc, cur) => acc && acc[cur], req);\n if (url.startsWith(\"http\")) return { url: url };\n }\n }\n return null;\n}\nasync function getTopLists() {\n const lists = (\n await axios_1.default.get(\n \"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\",\n {\n headers: headers,\n }\n )\n ).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: [],\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: [],\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: [],\n },\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: [],\n };\n lists.forEach((item) => {\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) {\n res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_a = item.imgurl) === null || _a === void 0\n ? void 0\n : _a.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 3 || item.classify === 5) {\n res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_b = item.imgurl) === null || _b === void 0\n ? void 0\n : _b.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else if (item.classify === 4) {\n res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_c = item.imgurl) === null || _c === void 0\n ? void 0\n : _c.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n } else {\n extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg:\n (_d = item.imgurl) === null || _d === void 0\n ? void 0\n : _d.replace(\"{size}\", \"400\"),\n title: item.rankname,\n });\n }\n });\n if (extra.data.length !== 0) {\n res.push(extra);\n }\n return res;\n}\nasync function getTopListDetail(topListItem) {\n const res = await axios_1.default.get(\n `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`,\n {\n headers,\n }\n );\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map(formatMusicItem2),\n });\n}\nasync function getLyricDownload(lyrdata) {\n const result = (\n await (0, axios_1.default)({\n // url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=krc&charset=utf8`,\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(result.content).toString(CryptoJs.enc.Utf8)\n ),\n };\n}\n// copy from lxmusic https://github.com/lyswhut/lx-music-desktop/blob/master/src/renderer/utils/musicSdk/kg/lyric.js#L114\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\",\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const info = result.candidates[0];\n return await getLyricDownload({ id: info.id, accessKey: info.accesskey });\n}\nasync function getAlbumInfo(albumItem, page = 1) {\n const res = (\n await axios_1.default.get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page,\n with_res_tag: 0,\n },\n })\n ).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total,\n },\n musicList: res.data.info.map((_) => {\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id,\n };\n }),\n };\n}\nasync function importMusicSheet(urlLike) {\n var _a;\n let id =\n (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0\n ? void 0\n : _a[1];\n let musicList = [];\n if (!id) {\n return;\n }\n let res = await axios_1.default.post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id,\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await axios_1.default.post(\n `http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`,\n {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count,\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song) => {\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\",\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource,\n token: \"\",\n userid: \"0\",\n vip: 0,\n };\n var result = await axios_1.default.post(\n `https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`,\n postData,\n {\n headers: {\n \"x-router\": \"media.store.kugou.com\",\n },\n }\n );\n if (response.status === 200 && response.data.status === 1) {\n musicList = result.data.data.map(formatImportMusicItem);\n }\n }\n }\n return musicList;\n}\nmodule.exports = {\n platform: \"\u9177\u72d7JHMS\",\n version: \"0.1.0\",\n author: \"t.me/JHMS_Channel\",\n appVersion: \">0.1.0-alpha.0\",\n srcUrl: UPDATE_URL,\n cacheControl: \"no-cache\",\n description: \"\",\n primaryKey: [\"id\", \"album_id\", \"album_audio_id\"],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n supportedSearchType: [\"music\", \"album\", \"sheet\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n },\n getMediaSource,\n getTopLists,\n getLyric,\n getTopListDetail,\n getAlbumInfo,\n importMusicSheet,\n};", "id": "msg_1789568509574"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷狗JHMS, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568509574: True [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷狗JHMS [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 种子 [2026-09-16 22:21:49] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:49] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u79cd\u5b50", "code": "var $d9Bti$axios = require(\"axios\");\nvar $d9Bti$cheerio = require(\"cheerio\");\nvar $d9Bti$dayjs = require(\"dayjs\");\nvar $d9Bti$cryptojs = require(\"crypto-js\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $89bf7938ddf8e249$export$2e2bcd8739ae039);\n/** \u641c\u7d22\u65b9\u6cd5 */ \n\n\nfunction $60fd231faf899fd5$export$47fac120ab74ef02(word, sing) {\n const key = (0, ($parcel$interopDefault($d9Bti$cryptojs))).enc.Utf8.parse(sing);\n const iv = (0, ($parcel$interopDefault($d9Bti$cryptojs))).enc.Utf8.parse(\"k1y2a3b4r5t6c7q7\");\n var encrypted = (0, ($parcel$interopDefault($d9Bti$cryptojs))).AES.encrypt(word, key, {\n iv: iv,\n mode: (0, ($parcel$interopDefault($d9Bti$cryptojs))).mode.CBC,\n padding: (0, ($parcel$interopDefault($d9Bti$cryptojs))).pad.Pkcs7\n });\n var ciphertext = encrypted.ciphertext.toString((0, ($parcel$interopDefault($d9Bti$cryptojs))).enc.Hex);\n return ciphertext.toUpperCase();\n}\nasync function $60fd231faf899fd5$export$bd6d310eff940ae4(url, params) {\n //\u8bf7\u6c42\u51fd\u6570\n var html = (0, ($parcel$interopDefault($d9Bti$axios))).get(url, {\n params: params,\n headers: {\n accept: \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\"\n }\n });\n return html;\n}\nfunction $60fd231faf899fd5$export$76cd2546cd31fda2(timeStr) {\n try {\n // \u5206\u79bb\u5c0f\u65f6\u548c\u5206\u949f\n const times = timeStr.split(\":\");\n if (times.length == 2) {\n const [minutes, second] = timeStr.split(\":\").map(Number);\n const minutesInSeconds = minutes * 60;\n return minutesInSeconds + second;\n } else if (times.length == 3) {\n const [hours, minutes, second] = timeStr.split(\":\").map(Number);\n const hoursInSeconds = minutes * 3600;\n const minutesInSeconds = minutes * 60;\n return hoursInSeconds + minutesInSeconds + second;\n }\n } catch (e) {\n return 0;\n }\n return 0;\n}\n\n\nfunction $5c617407703ff57c$export$d7bdacb66077735f(_) {\n return {\n id: _.id,\n platform: \"\u79cd\u5b50\",\n artist: _.sname,\n title: _.mname,\n album: _.pic,\n duration: (0, $60fd231faf899fd5$export$76cd2546cd31fda2)(_.play_time),\n artwork: _.pic,\n url: _.mp3\n };\n}\nfunction $5c617407703ff57c$export$ed1fb53032701881(_) {\n return {\n id: _.albumId ?? _.id,\n artist: _.nickname,\n title: _.title,\n artwork: _.coverPath?.startsWith(\"//\") ? `https:${_.coverPath}` : _.coverPath,\n description: _.intro ?? _.description,\n date: _.updatedAt ? (0, ($parcel$interopDefault($d9Bti$dayjs)))(_.updatedAt).format(\"YYYY-MM-DD\") : null\n };\n}\nfunction $5c617407703ff57c$export$d08aae127141ee12(_) {\n return {\n name: _.nickname,\n id: _.uid,\n fans: _.followersCount,\n description: _.description,\n avatar: _.logoPic,\n worksNum: _.tracksCount\n };\n}\nfunction $5c617407703ff57c$export$4141752cc74ed82e(_) {\n return {\n id: _.id,\n platform: \"\u5cb8\u542c\",\n artwork: _.coverImgUrl ?? _.pic,\n title: _.name,\n description: _.description,\n worksNum: _.trackCount\n };\n}\nfunction $5c617407703ff57c$export$fa5f2f9db37e5217(page, tag, first, list) {\n return {\n id: tag.id,\n artist: first.sname,\n title: first.mname,\n artwork: first.pic,\n musicList: list.map((_)=>{\n const r = $5c617407703ff57c$export$d7bdacb66077735f(_);\n return r;\n })\n };\n}\nfunction $5c617407703ff57c$export$4135fdd7029f141(raw) {\n return !raw.priceTypes?.length;\n}\nfunction $5c617407703ff57c$export$ed4cedad8375a67(raw) {\n return raw.tag === 0 || raw.isPaid === false || parseFloat(raw.price) === 0;\n}\n\n\n\nasync function $db56cb91f4576ed0$var$searchBase(query, page) {\n var html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"search\",\n key: query,\n lang: \"\"\n });\n var data = html.data;\n return data;\n}\nasync function $db56cb91f4576ed0$var$searchMusic(query, page) {\n var res = (await $db56cb91f4576ed0$var$searchBase(query, page)).data;\n return {\n isEnd: true,\n data: res.map((0, $5c617407703ff57c$export$d7bdacb66077735f))\n };\n}\nasync function $db56cb91f4576ed0$var$searchAlbum(query, page) {\n /*const res = (await searchBase(query, page, \"album\")).data.album;\n return {\n isEnd: true,\n data: res.map(formatMusicItem),\n };*/ return {\n isEnd: true,\n data: []\n };\n}\nasync function $db56cb91f4576ed0$var$searchArtist(query, page) {\n var res = (await $db56cb91f4576ed0$var$searchBase(query, page)).data;\n return {\n isEnd: true,\n data: res.filter((raw)=>raw.sname.include(query)).map((0, $5c617407703ff57c$export$d7bdacb66077735f))\n };\n}\nasync function $db56cb91f4576ed0$export$2e2bcd8739ae039(query, page, type) {\n if (type === \"music\") return $db56cb91f4576ed0$var$searchMusic(query, page);\n else if (type === \"album\") return $db56cb91f4576ed0$var$searchAlbum(query, page);\n else if (type === \"artist\") return $db56cb91f4576ed0$var$searchArtist(query, page);\n}\n\n\n\n\n\n\n/** \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5 */ async function $89bf7938ddf8e249$var$getAlbumInfo(albumItem, page = 1) {\n const res = await (0, ($parcel$interopDefault($d9Bti$axios))).get(\"https://www.ximalaya.com/revision/album/v1/getTracksList\", {\n params: {\n albumId: albumItem.id,\n pageNum: page,\n pageSize: 50\n }\n });\n return {\n isEnd: page * 50 >= res.data.data.trackTotalCount,\n albumItem: {\n worksNum: res.data.data.trackTotalCount\n },\n musicList: res.data.data.tracks.filter((0, $5c617407703ff57c$export$ed4cedad8375a67)).map((_)=>{\n const r = (0, $5c617407703ff57c$export$d7bdacb66077735f)(_);\n r.artwork = albumItem.artwork;\n r.artist = albumItem.artist;\n return r;\n })\n };\n}\n/** \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5 */ async function $89bf7938ddf8e249$var$getLyric(musicItem) {\n let html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"songinfo\",\n id: musicItem.id,\n lang: \"\"\n });\n const data = html.data.data;\n return {\n rawLrc: data.lrc\n };\n}\n/** \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5 */ async function $89bf7938ddf8e249$var$getMediaSource(musicItem, quality) {\n let html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"songinfo\",\n id: musicItem.id,\n lang: \"\"\n });\n const data = html.data.data;\n return {\n url: data.mp3,\n quality: quality\n };\n}\nasync function $89bf7938ddf8e249$var$getTopLists() {\n var result = [];\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com\", {});\n const $ = $d9Bti$cheerio.load(html.data);\n const tops = $(\".d-none .cate-list a\").get();\n var lists = [];\n for(var i in tops)lists.push({\n id: $(tops[i]).attr(\"href\").match(/\\/list\\/(\\w+)\\.htm/)[1],\n title: $(tops[i]).text()\n });\n result.push({\n title: \"\u79cd\u5b50\u97f3\u4e50\",\n data: lists\n });\n // return\n return result;\n}\nasync function $89bf7938ddf8e249$var$getTopListDetail(sheetItem, page = 1) {\n var result;\n result = {\n ...sheetItem\n };\n const id = sheetItem.id;\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: id,\n lang: \"\",\n page: 1\n });\n var list = html.data.data;\n result.musicList = list.map((_)=>{\n const r = (0, $5c617407703ff57c$export$d7bdacb66077735f)(_);\n return r;\n });\n const html2 = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: id,\n lang: \"\",\n page: 2\n });\n var list2 = html2.data.data;\n result.musicList = result.musicList.concat(list2.map((_)=>{\n const r = (0, $5c617407703ff57c$export$d7bdacb66077735f)(_);\n return r;\n }));\n return result;\n}\nasync function $89bf7938ddf8e249$var$getRecommendSheetTags() {\n var result = {};\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com\", {});\n const $ = $d9Bti$cheerio.load(html.data);\n const menus = $(\"ul.channel li\").get();\n var lists = [];\n for(var i in menus)lists.push({\n id: $(menus[i]).find(\"a\").attr(\"href\").match(/\\/list\\/(\\w+)\\.htm/)[1],\n title: $(menus[i]).find(\"a span\").text()\n });\n result.pinned = lists;\n var datas = [];\n datas.push({\n data: lists\n });\n result.data = datas;\n return result;\n}\nasync function $89bf7938ddf8e249$var$getRecommendSheetsByTag(tag, page) {\n var result = {};\n let size = 50;\n var datas = [];\n var num = 1;\n while(size == 50 && num <= 10){\n const html = await (0, $60fd231faf899fd5$export$bd6d310eff940ae4)(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: tag.id || \"azz\",\n lang: \"\",\n page: (page - 1) * 10 + num\n });\n const list = html.data.data;\n if (list.length > 0) {\n const first = list[0];\n datas.push((0, $5c617407703ff57c$export$fa5f2f9db37e5217)(page, tag, first, list));\n }\n size = list.length;\n num++;\n if (num == 10 && size == 50) result.isEnd = false;\n }\n result.data = datas;\n return result;\n}\nasync function $89bf7938ddf8e249$var$getMusicSheetInfo(sheetItem, page) {\n var result = {};\n result.sheetItem = sheetItem;\n /* const html = await getHtml(\"https://zz123.com/ajax/\", {\n act: \"tag_music\",\n tid: sheetItem.id,\n lang: \"\",\n page: sheetItem.page\n });\n const list = html.data.data;*/ result.musicList = sheetItem.musicList;\n result.isEnd = true;\n return result;\n}\nconst $89bf7938ddf8e249$var$pluginInstance = {\n platform: \"\u79cd\u5b50\",\n version: \"0.1.0\",\n author: \"SoEasy\u540c\u5b66\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/zz.js\",\n supportedSearchType: [\n \"music\",\n \"album\",\n \"artist\"\n ],\n search: $db56cb91f4576ed0$export$2e2bcd8739ae039,\n getMediaSource: $89bf7938ddf8e249$var$getMediaSource,\n getLyric: $89bf7938ddf8e249$var$getLyric,\n getTopLists: // getAlbumInfo, // \u83b7\u53d6\u4e13\u8f91\u8be6\u60c5\n // getArtistWorks, // \u83b7\u53d6\u4f5c\u8005\u4fe1\u606f\n $89bf7938ddf8e249$var$getTopLists,\n getTopListDetail: $89bf7938ddf8e249$var$getTopListDetail,\n getRecommendSheetTags: $89bf7938ddf8e249$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $89bf7938ddf8e249$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $89bf7938ddf8e249$var$getMusicSheetInfo\n};\n/*search(\"\u7ae5\u8bdd\u9547\", 1, \"music\").then((res) => {\n console.log(res)\n getMediaSource(res.data[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.data[0]).then((res) => {\n console.log(res)\n })\n})*/ /*getRecommendSheetTags().then((res) => {\n console.log(res)\n getRecommendSheetsByTag(res.pinned[0], 1).then((res) => {\n console.log(res)\n getMusicSheetInfo(res.data[0], 1).then((res) => {\n console.log(res);\n getMediaSource(res.musicList[0], \"standard\").then((res) => {\n console.log(res)\n })\n getLyric(res.musicList[0]).then((res) => {\n console.log(res)\n })\n })\n })\n})*/ $89bf7938ddf8e249$var$getTopLists().then((res)=>{\n console.log(res);\n $89bf7938ddf8e249$var$getTopListDetail(res[0].data[0]).then((res)=>{\n console.log(res);\n $89bf7938ddf8e249$var$getMediaSource(res.musicList[0], \"standard\").then((res)=>{\n console.log(res);\n });\n $89bf7938ddf8e249$var$getLyric(res.musicList[0]).then((res)=>{\n console.log(res);\n });\n });\n});\nvar $89bf7938ddf8e249$export$2e2bcd8739ae039 = $89bf7938ddf8e249$var$pluginInstance;\n\n\n//# sourceMappingURL=zz.js.map", "id": "msg_1789568509876"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 种子, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568509876: True [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 种子 [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小枸音乐 [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5c0f\u67b8\u97f3\u4e50", "code": "var $hTj9b$axios = require(\"axios\");\nvar $hTj9b$cheerio = require(\"cheerio\");\nvar $hTj9b$cryptojs = require(\"crypto-js\");\nvar $hTj9b$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $28c810e89c2349b3$export$2e2bcd8739ae039);\n\n\n\n\nconst $28c810e89c2349b3$var$pageSize = 20;\nfunction $28c810e89c2349b3$var$formatMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n return {\n id: (_d = _.FileHash) !== null && _d !== void 0 ? _d : _.Grp[0].FileHash,\n title: (_a = _.SongName) !== null && _a !== void 0 ? _a : _.OriSongName,\n artist: (_b = _.SingerName) !== null && _b !== void 0 ? _b : _.Singers[0].name,\n album: (_c = _.AlbumName) !== null && _c !== void 0 ? _c : _.Grp[0].AlbumName,\n album_id: (_e = _.AlbumID) !== null && _e !== void 0 ? _e : _.Grp[0].AlbumID,\n album_audio_id: 0,\n duration: _.Duration,\n artwork: ((_f = _.Image) !== null && _f !== void 0 ? _f : _.Grp[0].Image).replace(\"{size}\", \"1080\"),\n \"320hash\": (_i = _.HQFileHash) !== null && _i !== void 0 ? _i : undefined,\n sqhash: (_g = _.SQFileHash) !== null && _g !== void 0 ? _g : undefined,\n ResFileHash: (_h = _.ResFileHash) !== null && _h !== void 0 ? _h : undefined\n };\n}\nfunction $28c810e89c2349b3$var$formatMusicItem2(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: _.hash,\n title: _.songname,\n artist: (_a = _.singername) !== null && _a !== void 0 ? _a : ((_c = (_b = _.authors) === null || _b === void 0 ? void 0 : _b.map((_)=>{\n var _a;\n return (_a = _ === null || _ === void 0 ? void 0 : _.author_name) !== null && _a !== void 0 ? _a : \"\";\n })) === null || _c === void 0 ? void 0 : _c.join(\", \")) || ((_f = (_e = (_d = _.filename) === null || _d === void 0 ? void 0 : _d.split(\"-\")) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover ? _.album_sizable_cover.replace(\"{size}\", \"400\") : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash\n };\n}\nfunction $28c810e89c2349b3$var$formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) title = (_a = title.substring(index + singerName.length + 2)) === null || _a === void 0 ? void 0 : _a.trim();\n if (!title) title = singerName;\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title: title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: (_d = (_c = _ === null || _ === void 0 ? void 0 : _.info) === null || _c === void 0 ? void 0 : _c.image) === null || _d === void 0 ? void 0 : _d.replace(\"{size}\", \"400\"),\n \"320hash\": (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) === null || _e === void 0 ? void 0 : _e.hash,\n sqhash: (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) === null || _f === void 0 ? void 0 : _f.hash,\n origin_hash: (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) === null || _g === void 0 ? void 0 : _g.hash\n };\n}\nconst $28c810e89c2349b3$var$headers = {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\"\n};\nasync function $28c810e89c2349b3$var$searchMusic(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1\n }\n })).data;\n const songs = res.data.lists.map($28c810e89c2349b3$var$formatMusicItem);\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: songs\n };\n}\nasync function $28c810e89c2349b3$var$searchAlbum(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page: page,\n sver: 2,\n with_res_tag: 0\n }\n })).data;\n const albums = res.data.info.map((_)=>{\n var _a, _b;\n return {\n id: _.albumid,\n artwork: (_a = _.imgurl) === null || _a === void 0 ? void 0 : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, $hTj9b$cheerio.load)(_.albumname).text(),\n description: _.intro,\n date: (_b = _.publishtime) === null || _b === void 0 ? void 0 : _b.slice(0, 10)\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums\n };\n}\nasync function $28c810e89c2349b3$var$searchMusicSheet(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdn.kugou.com/api/v3/search/special\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n format: \"json\",\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n showtype: 1\n }\n })).data;\n const sheets = res.data.info.map((item)=>({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount\n }));\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: sheets\n };\n}\nconst $28c810e89c2349b3$var$qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"flac24bit\"\n};\nasync function $28c810e89c2349b3$var$getMediaSource(musicItem, quality) {\n let url = \"\";\n // https://m.kugou.com/mixsong/j2ss6c1.html\n // const paramUrl = \"http://110.42.38.239:1314/url/kg/\" + musicItem.id + \"/\" + qualityLevels[quality];\n const res1 = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(`https://lxmusicapi.onrender.com/url/kg/${musicItem.id}/${$28c810e89c2349b3$var$qualityLevels[quality]}`, {\n headers: {\n \"X-Request-Key\": \"share-v2\"\n }\n })).data;\n if (!res1.url || res1.msg != \"success\") {\n const res2 = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(`https://lxmusicapi.onrender.com/url/kg/${musicItem.id}/${$28c810e89c2349b3$var$qualityLevels[quality]}`, {\n headers: {\n \"X-Request-Key\": \"share-v2\"\n }\n })).data;\n if (!res2.url || res2.msg != \"success\") ;\n else url = res2.url;\n } else url = res1.url;\n return {\n url: url\n };\n}\nasync function $28c810e89c2349b3$var$getTopLists() {\n const lists = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdnbj.kugou.com/api/v3/rank/list?version=9108&plat=0&showtype=2&parentid=0&apiver=6&area_code=1&withsong=0&with_res_tag=0\", {\n headers: $28c810e89c2349b3$var$headers\n })).data.data.info;\n const res = [\n {\n title: \"\u70ed\u95e8\u699c\u5355\",\n data: []\n },\n {\n title: \"\u7279\u8272\u97f3\u4e50\u699c\",\n data: []\n },\n {\n title: \"\u5168\u7403\u699c\",\n data: []\n }\n ];\n const extra = {\n title: \"\u5176\u4ed6\",\n data: []\n };\n lists.forEach((item)=>{\n var _a, _b, _c, _d;\n if (item.classify === 1 || item.classify === 2) res[0].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_a = item.imgurl) === null || _a === void 0 ? void 0 : _a.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else if (item.classify === 3 || item.classify === 5) res[1].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_b = item.imgurl) === null || _b === void 0 ? void 0 : _b.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else if (item.classify === 4) res[2].data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_c = item.imgurl) === null || _c === void 0 ? void 0 : _c.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n else extra.data.push({\n id: item.rankid,\n description: item.intro,\n coverImg: (_d = item.imgurl) === null || _d === void 0 ? void 0 : _d.replace(\"{size}\", \"400\"),\n title: item.rankname\n });\n });\n if (extra.data.length !== 0) res.push(extra);\n return res;\n}\nasync function $28c810e89c2349b3$var$getTopListDetail(topListItem) {\n const res = await (0, ($parcel$interopDefault($hTj9b$axios))).get(`http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=0&plat=0&pagesize=100&area_code=1&page=1&volid=35050&rankid=${topListItem.id}&with_res_tag=0`, {\n headers: $28c810e89c2349b3$var$headers\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.data.info.map($28c810e89c2349b3$var$formatMusicItem2)\n });\n}\nasync function $28c810e89c2349b3$var$getLyricDownload(lyrdata) {\n const result = (await (0, ($parcel$interopDefault($hTj9b$axios)))({\n // url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=krc&charset=utf8`,\n url: `http://lyrics.kugou.com/download?ver=1&client=pc&id=${lyrdata.id}&accesskey=${lyrdata.accessKey}&fmt=lrc&charset=utf8`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n rawLrc: (0, ($parcel$interopDefault($hTj9b$he))).decode((0, ($parcel$interopDefault($hTj9b$cryptojs))).enc.Base64.parse(result.content).toString((0, ($parcel$interopDefault($hTj9b$cryptojs))).enc.Utf8))\n };\n}\n// copy from lxmusic https://github.com/lyswhut/lx-music-desktop/blob/master/src/renderer/utils/musicSdk/kg/lyric.js#L114\nasync function $28c810e89c2349b3$var$getLyric(musicItem) {\n const result = (await (0, ($parcel$interopDefault($hTj9b$axios)))({\n url: `http://lyrics.kugou.com/search?ver=1&man=yes&client=pc&keyword=${musicItem.title}&hash=${musicItem.id}&timelength=${musicItem.duration}`,\n headers: {\n \"KG-RC\": 1,\n \"KG-THash\": \"expand_search_manager.cpp:852736169:451\",\n \"User-Agent\": \"KuGou2012-9020-ExpandSearchManager\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const info = result.candidates[0];\n return await $28c810e89c2349b3$var$getLyricDownload({\n id: info.id,\n accessKey: info.accesskey\n });\n}\nasync function $28c810e89c2349b3$var$getAlbumInfo(albumItem, page = 1) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdn.kugou.com/api/v3/album/song\", {\n params: {\n version: 9108,\n albumid: albumItem.id,\n plat: 0,\n pagesize: 100,\n area_code: 1,\n page: page,\n with_res_tag: 0\n }\n })).data;\n return {\n isEnd: page * 100 >= res.data.total,\n albumItem: {\n worksNum: res.data.total\n },\n musicList: res.data.info.map((_)=>{\n var _a;\n const [artist, songname] = _.filename.split(\"-\");\n return {\n id: _.hash,\n title: songname.trim(),\n artist: artist.trim(),\n album: (_a = _.album_name) !== null && _a !== void 0 ? _a : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: albumItem.artwork,\n \"320hash\": _.HQFileHash,\n sqhash: _.SQFileHash,\n origin_hash: _.id\n };\n })\n };\n}\nasync function $28c810e89c2349b3$var$importMusicSheet(urlLike) {\n var _a;\n let id = (_a = urlLike.match(/^(?:.*?)(\\d+)(?:.*?)$/)) === null || _a === void 0 ? void 0 : _a[1];\n let musicList = [];\n if (!id) return;\n let res = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`http://t.kugou.com/command/`, {\n appid: 1001,\n clientver: 9020,\n mid: \"21511157a05844bd085308bc76ef3343\",\n clienttime: 640612895,\n key: \"36164c4015e704673c588ee202b9ecb8\",\n data: id\n });\n if (res.status === 200 && res.data.status === 1) {\n let data = res.data.data;\n let response = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`http://www2.kugou.kugou.com/apps/kucodeAndShare/app/`, {\n appid: 1001,\n clientver: 10112,\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n clienttime: 722219501,\n key: \"381d7062030e8a5a94cfbe50bfe65433\",\n data: {\n id: data.info.id,\n type: 3,\n userid: data.info.userid,\n collect_type: data.info.collect_type,\n page: 1,\n pagesize: data.info.count\n }\n });\n if (response.status === 200 && response.data.status === 1) {\n let resource = [];\n response.data.data.forEach((song)=>{\n resource.push({\n album_audio_id: 0,\n album_id: \"0\",\n hash: song.hash,\n id: 0,\n name: song.filename.replace(\".mp3\", \"\"),\n page_id: 0,\n type: \"audio\"\n });\n });\n let postData = {\n appid: 1001,\n area_code: \"1\",\n behavior: \"play\",\n clientver: \"10112\",\n dfid: \"2O3jKa20Gdks0LWojP3ly7ck\",\n mid: \"70a02aad1ce4648e7dca77f2afa7b182\",\n need_hash_offset: 1,\n relate: 1,\n resource: resource,\n token: \"\",\n userid: \"0\",\n vip: 0\n };\n var result = await (0, ($parcel$interopDefault($hTj9b$axios))).post(`https://gateway.kugou.com/v2/get_res_privilege/lite?appid=1001&clienttime=1668883879&clientver=10112&dfid=2O3jKa20Gdks0LWojP3ly7ck&mid=70a02aad1ce4648e7dca77f2afa7b182&userid=390523108&uuid=92691C6246F86F28B149BAA1FD370DF1`, postData, {\n headers: {\n \"x-router\": \"media.store.kugou.com\"\n }\n });\n if (response.status === 200 && response.data.status === 1) musicList = result.data.data.map($28c810e89c2349b3$var$formatImportMusicItem);\n }\n }\n return musicList;\n}\nasync function $28c810e89c2349b3$var$search(query, page, type) {\n if (type === \"music\") return await $28c810e89c2349b3$var$searchMusic(query, page);\n else if (type === \"album\") return await $28c810e89c2349b3$var$searchAlbum(query, page);\n else if (type === \"sheet\") return await $28c810e89c2349b3$var$searchMusicSheet(query, page);\n}\nconst $28c810e89c2349b3$var$pluginInstance = {\n platform: \"\u5c0f\u67b8\u97f3\u4e50\",\n author: \"SoEasy\u540c\u5b66\",\n version: \"0.0.3\",\n srcUrl: \"https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/xiaogou.js\",\n cacheControl: \"no-cache\",\n primaryKey: [\n \"id\",\n \"album_id\",\n \"album_audio_id\"\n ],\n hints: {\n importMusicSheet: [\n \"\u4ec5\u652f\u6301\u9177\u72d7APP\u901a\u8fc7\u9177\u72d7\u7801\u5bfc\u5165\uff0c\u8f93\u5165\u7eaf\u6570\u5b57\u9177\u72d7\u7801\u5373\u53ef\u3002\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\"\n ],\n search: $28c810e89c2349b3$var$search,\n getMediaSource: $28c810e89c2349b3$var$getMediaSource,\n getTopLists: $28c810e89c2349b3$var$getTopLists,\n getLyric: $28c810e89c2349b3$var$getLyric,\n getTopListDetail: $28c810e89c2349b3$var$getTopListDetail,\n getAlbumInfo: $28c810e89c2349b3$var$getAlbumInfo,\n importMusicSheet: $28c810e89c2349b3$var$importMusicSheet\n};\n$28c810e89c2349b3$var$search(\"\u7ae5\u8bdd\u9547\", 1, \"music\").then((res)=>{\n console.log(res);\n $28c810e89c2349b3$var$getMediaSource(res.data[0], \"standard\").then((res)=>{\n console.log(res);\n });\n $28c810e89c2349b3$var$getLyric(res.data[0]).then((res)=>{\n console.log(res);\n });\n});\nvar $28c810e89c2349b3$export$2e2bcd8739ae039 = $28c810e89c2349b3$var$pluginInstance;\n\n\n//# sourceMappingURL=xiaogou.js.map", "id": "msg_1789568510177"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 小枸音乐, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568510177: True [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 小枸音乐 [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 西瓜糖QQ [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u897f\u74dc\u7cd6QQ", "code": "const CONFIG = {\n apiKey: \"78ba562b6b7de94edb2f4465f1a2a1feaffe9878e3b98385c4d7e7b4cf98a524\",\n enableCustomAPI: true,\n debugMode: false,\n requestTimeout: 10000,\n maxRetryCount: 3,\n qualityPriority: [\"super\", \"high\", \"standard\", \"low\"]\n};\n\nvar $fFvhi$axios = require(\"axios\");\nvar $fFvhi$cryptojs = require(\"crypto-js\");\nvar $fFvhi$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $d25ff3d008f9e7e0$export$2e2bcd8739ae039);\n\nconst $d25ff3d008f9e7e0$var$pageSize = 20;\n\nfunction $d25ff3d008f9e7e0$var$getApiKey() {\n if (CONFIG.apiKey && CONFIG.apiKey.trim() !== \"\") {\n return CONFIG.apiKey;\n }\n \n if (typeof env !== 'undefined' && env.getUserVariables) {\n const vars = env.getUserVariables();\n return (vars && vars.apiKey) || \"\";\n }\n \n if (typeof window !== 'undefined' && window.pluginConfigs && window.pluginConfigs.qqmusic && window.pluginConfigs.qqmusic.apiKey) {\n return window.pluginConfigs.qqmusic.apiKey;\n }\n \n return \"\";\n}\n\nfunction $d25ff3d008f9e7e0$var$formatMusicItem(_) {\n var _a, _b, _c;\n const albumid = _.albumid || ((_a = _.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid = _.albummid || ((_b = _.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname = _.albumname || ((_c = _.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: _.id || _.songid,\n songmid: _.mid || _.songmid,\n title: _.title || _.songname,\n artist: _.singer.map((s)=>s.name).join(\", \"),\n artwork: albummid ? `https://y.gtimg.cn/music/photo_new/T002R800x800M000${albummid}.jpg` : undefined,\n album: albumname,\n albumid: albumid,\n albummid: albummid\n };\n}\n\nfunction $d25ff3d008f9e7e0$var$formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork: _.albumPic || `https://y.gtimg.cn/music/photo_new/T002R800x800M000${_.albumMID || _.album_mid}.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc\n };\n}\n\nfunction $d25ff3d008f9e7e0$var$formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum\n };\n}\n\nconst $d25ff3d008f9e7e0$var$searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\"\n};\n\nconst $d25ff3d008f9e7e0$var$headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\"\n};\n\nasync function $d25ff3d008f9e7e0$var$getMusicInfoFromCustomAPI(songmid) {\n const apiKey = $d25ff3d008f9e7e0$var$getApiKey();\n \n if (!apiKey || apiKey.trim() === \"\") {\n throw new Error(\"\u8bf7\u5148\u5728\u7528\u6237\u53d8\u91cf\u4e2d\u914d\u7f6eAPI\u5bc6\u94a5\");\n }\n \n try {\n const url = `https://api.nki.pw/API/music_open_api.php?apikey=${encodeURIComponent(apiKey)}&mid=${songmid}`;\n const response = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"GET\",\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\"\n }\n });\n \n if (response.data && response.data.song_mid) {\n return response.data;\n }\n throw new Error(\"API\u54cd\u5e94\u6570\u636e\u683c\u5f0f\u9519\u8bef\");\n } catch (error) {\n throw new Error(`API\u8bf7\u6c42\u5931\u8d25: ${error.message}`);\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$searchBase(query, page, type) {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: $d25ff3d008f9e7e0$var$pageSize,\n page_num: page,\n query: query,\n search_type: type\n }\n }\n },\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.req_1.data.body[$d25ff3d008f9e7e0$var$searchTypeMap[type]].list\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchMusic(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchAlbum(query, page) {\n const albums = await $d25ff3d008f9e7e0$var$searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchArtist(query, page) {\n const artists = await $d25ff3d008f9e7e0$var$searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map($d25ff3d008f9e7e0$var$formatArtistItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchMusicSheet(query, page) {\n const musicSheet = await $d25ff3d008f9e7e0$var$searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item)=>({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name\n }))\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$searchLyric(query, page) {\n const songs = await $d25ff3d008f9e7e0$var$searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it)=>Object.assign(Object.assign({}, $d25ff3d008f9e7e0$var$formatMusicItem(it)), {\n rawLrcTxt: it.content\n }))\n };\n}\n\nfunction $d25ff3d008f9e7e0$var$getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) s = sArr[1];\n else return key ? undefined : {};\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item)=>{\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n } catch (err) {\n return key ? \"\" : {};\n }\n}\n\nfunction $d25ff3d008f9e7e0$var$changeUrlQuery(obj, baseUrl) {\n const query = $d25ff3d008f9e7e0$var$getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key)=>{\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\n\nasync function $d25ff3d008f9e7e0$var$getAlbumInfo(albumItem) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2\n },\n module: \"music.musichallAlbum.AlbumSongList\"\n }\n })\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n musicList: res.albumSonglist.data.songList.map((item)=>{\n const _ = item.songInfo;\n return $d25ff3d008f9e7e0$var$formatMusicItem(_);\n })\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singer.data.total_song <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singer.data.songlist.map($d25ff3d008f9e7e0$var$formatMusicItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page) {\n const url = $d25ff3d008f9e7e0$var$changeUrlQuery({\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * $d25ff3d008f9e7e0$var$pageSize,\n num: $d25ff3d008f9e7e0$var$pageSize / 1,\n exstatus: 1\n },\n module: \"music.web_singer_info_svr\"\n }\n })\n }, \"http://u.y.qq.com/cgi-bin/musicu.fcg\");\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: url,\n method: \"get\",\n headers: $d25ff3d008f9e7e0$var$headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * $d25ff3d008f9e7e0$var$pageSize,\n data: res.singerAlbum.data.list.map($d25ff3d008f9e7e0$var$formatAlbumItem)\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getArtistWorks(artistItem, page, type) {\n if (type === \"music\") return $d25ff3d008f9e7e0$var$getArtistSongs(artistItem, page);\n if (type === \"album\") return $d25ff3d008f9e7e0$var$getArtistAlbums(artistItem, page);\n}\n\nasync function $d25ff3d008f9e7e0$var$getLyric(musicItem) {\n try {\n const apiData = await $d25ff3d008f9e7e0$var$getMusicInfoFromCustomAPI(musicItem.songmid);\n \n if (apiData.song_lyric) {\n return {\n rawLrc: apiData.song_lyric,\n translation: apiData.lyric || \"\"\n };\n }\n \n throw new Error(\"API\u672a\u8fd4\u56de\u6b4c\u8bcd\");\n } catch (error) {\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid}&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: {\n Referer: \"https://y.qq.com\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n let translation;\n if (res.trans) translation = (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.trans).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8));\n return {\n rawLrc: (0, ($parcel$interopDefault($fFvhi$he))).decode((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Base64.parse(res.lyric).toString((0, ($parcel$interopDefault($fFvhi$cryptojs))).enc.Utf8)),\n translation: translation\n };\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$importMusicSheet(urlLike) {\n let id;\n if (!id) id = (urlLike.match(/https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) || [])[1];\n if (!id) id = (urlLike.match(/^(\\d+)$/) || [])[1];\n if (!id) return;\n const result = (await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `http://i.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: {\n Referer: \"https://y.qq.com/n/yqq/playlist\",\n Cookie: \"uin=\"\n },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n })).data;\n const res = JSON.parse(result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\"));\n return res.cdlist[0].songlist.map($d25ff3d008f9e7e0$var$formatMusicItem);\n}\n\nasync function $d25ff3d008f9e7e0$var$getTopLists() {\n const list = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return list.data.topList.data.group.map((e)=>({\n title: e.groupName,\n data: e.toplist.map((_)=>({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl\n }))\n }));\n}\n\nasync function $d25ff3d008f9e7e0$var$getTopListDetail(topListItem) {\n var _a;\n const res = await (0, ($parcel$interopDefault($fFvhi$axios)))({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id}%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"}%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\"\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList.map($d25ff3d008f9e7e0$var$formatMusicItem)\n });\n}\n\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetTags() {\n const res = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\", {\n headers: {\n referer: \"https://y.qq.com/\"\n }\n })).data.data.categories;\n const data = res.slice(1).map((_)=>({\n title: _.categoryGroupName,\n data: _.items.map((tag)=>({\n id: tag.categoryId,\n title: tag.categoryName\n }))\n }));\n const pinned = [];\n for (let d of data)if (d.data.length) pinned.push(d.data[0]);\n return {\n pinned: pinned,\n data: data\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (await (0, ($parcel$interopDefault($fFvhi$axios))).get(\"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\", {\n headers: {\n referer: \"https://y.qq.com/\"\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId: (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1\n }\n })).data;\n const res = JSON.parse(rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item)=>{\n var _a, _b;\n return {\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist: (_b = (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"\"\n };\n });\n return {\n isEnd: isEnd,\n data: data\n };\n}\n\nasync function $d25ff3d008f9e7e0$var$getMusicSheetInfo(sheet, page) {\n const data = await $d25ff3d008f9e7e0$var$importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data\n };\n}\n\nconst $d25ff3d008f9e7e0$var$qualityMap = {\n low: \"standard\",\n standard: \"standard\",\n high: \"sq\",\n super: \"sq\"\n};\n\nasync function $d25ff3d008f9e7e0$var$getMediaSource(musicItem, quality) {\n const apiKey = $d25ff3d008f9e7e0$var$getApiKey();\n \n if (!apiKey || apiKey.trim() === \"\") {\n throw new Error(\"\u8bf7\u5148\u5728\u7528\u6237\u53d8\u91cf\u4e2d\u914d\u7f6eAPI\u5bc6\u94a5\");\n }\n \n try {\n const apiData = await $d25ff3d008f9e7e0$var$getMusicInfoFromCustomAPI(musicItem.songmid);\n \n let playUrl;\n const qualityLevel = $d25ff3d008f9e7e0$var$qualityMap[quality] || \"standard\";\n \n if (qualityLevel === \"sq\" && apiData.song_play_url_sq) {\n playUrl = apiData.song_play_url_sq;\n } else if (apiData.song_play_url) {\n playUrl = apiData.song_play_url;\n } else {\n throw new Error(\"\u672a\u627e\u5230\u5bf9\u5e94\u97f3\u8d28\u7684\u64ad\u653e\u94fe\u63a5\");\n }\n \n if (!playUrl || playUrl.trim() === \"\") {\n throw new Error(\"\u64ad\u653e\u94fe\u63a5\u4e3a\u7a7a\");\n }\n \n return {\n url: playUrl,\n headers: {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\",\n \"Referer\": \"https://y.qq.com/\"\n }\n };\n } catch (error) {\n throw new Error(`\u83b7\u53d6\u97f3\u4e50\u6e90\u5931\u8d25: ${error.message}`);\n }\n}\n\nasync function $d25ff3d008f9e7e0$var$search(query, page, type) {\n if (type === \"music\") return await $d25ff3d008f9e7e0$var$searchMusic(query, page);\n if (type === \"album\") return await $d25ff3d008f9e7e0$var$searchAlbum(query, page);\n if (type === \"artist\") return await $d25ff3d008f9e7e0$var$searchArtist(query, page);\n if (type === \"sheet\") return await $d25ff3d008f9e7e0$var$searchMusicSheet(query, page);\n if (type === \"lyric\") return await $d25ff3d008f9e7e0$var$searchLyric(query, page);\n}\n\nconst $d25ff3d008f9e7e0$var$pluginInstance = {\n platform: \"\u897f\u74dc\u7cd6(Q\u97f3)\",\n author: \"\u73a5\u7136OvO\",\n version: \"1\",\n srcUrl: \"https://raw.gitcode.com/Crystim/mfp/raw/main/%E8%A5%BF%E7%93%9C%E7%B3%96QQ.js\",\n cacheControl: \"no-cache\",\n \n userVariables: [\n {\n key: \"apiKey\",\n name: \"API\u5bc6\u94a5\",\n hint: \"\u8bf7\u8f93\u5165\u81ea\u5b9a\u4e49API\u7684\u5bc6\u94a5\uff0c\u83b7\u53d6\u5730\u5740\uff1ahttps://api.nki.pw\"\n }\n ],\n \n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\"\n ],\n importMusicItem: []\n },\n primaryKey: [\n \"id\",\n \"songmid\"\n ],\n supportedSearchType: [\n \"music\",\n \"album\",\n \"sheet\",\n \"artist\",\n \"lyric\"\n ],\n search: $d25ff3d008f9e7e0$var$search,\n getMediaSource: $d25ff3d008f9e7e0$var$getMediaSource,\n getLyric: $d25ff3d008f9e7e0$var$getLyric,\n getAlbumInfo: $d25ff3d008f9e7e0$var$getAlbumInfo,\n getArtistWorks: $d25ff3d008f9e7e0$var$getArtistWorks,\n importMusicSheet: $d25ff3d008f9e7e0$var$importMusicSheet,\n getTopLists: $d25ff3d008f9e7e0$var$getTopLists,\n getTopListDetail: $d25ff3d008f9e7e0$var$getTopListDetail,\n getRecommendSheetTags: $d25ff3d008f9e7e0$var$getRecommendSheetTags,\n getRecommendSheetsByTag: $d25ff3d008f9e7e0$var$getRecommendSheetsByTag,\n getMusicSheetInfo: $d25ff3d008f9e7e0$var$getMusicSheetInfo\n};\n\nvar $d25ff3d008f9e7e0$export$2e2bcd8739ae039 = $d25ff3d008f9e7e0$var$pluginInstance;\n\n//# sourceMappingURL=qqmusic.js.map", "id": "msg_1789568510479"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 西瓜糖QQ, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568510479: True [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 西瓜糖QQ [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 快手 [2026-09-16 22:21:50] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u5feb\u624b", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst pageSize = 20;\nfunction formatMusicItem(it) {\n return {\n id: it.photo.id,\n title: it.photo.caption,\n artist: it.author.name,\n artwork: it.photo.coverUrl || it.photo.photoUrl,\n manifest: it.photo.manifest\n };\n}\nasync function searchMusic(query, page) {\n var _a, _b;\n const body = {\n query: `fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n riskTagContent\n riskTagUrl\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}`,\n variables: {\n keyword: query,\n page: \"search\",\n pcursor: `${page - 1}`,\n },\n };\n const result = (await axios_1.default.post(\"https://www.kuaishou.com/graphql\", body, {\n headers: {\n 'user-agent': \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n host: 'www.kuaishou.com',\n origin: 'https://www.kuaishou.com',\n referer: `https://www.kuaishou.com/search/video?searchKey=${encodeURIComponent((query))}`,\n }\n })).data.data.visionSearchPhoto;\n return {\n isEnd: !(result === null || result === void 0 ? void 0 : result.pcursor) || (result === null || result === void 0 ? void 0 : result.pcursor) === 'no_more',\n data: (_b = (_a = result === null || result === void 0 ? void 0 : result.feeds) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, formatMusicItem)\n };\n}\nmodule.exports = {\n platform: \"\u5feb\u624b\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/kuaishou/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: [\"music\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n if (!musicItem.manifest) {\n return;\n }\n const adaptationSet = musicItem.manifest.adaptationSet;\n const representation = adaptationSet[0].representation;\n return {\n url: representation[0].url\n };\n },\n};", "id": "msg_1789568510780"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:50] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 快手, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568510780: True [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 快手 [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我 [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u6211", "code": "var _0xodC=\"jsjiami.com.v7\";(\"use strict\");const _0x5e6c5c=_0x26aa;((function(_0x5887cc,_0x3c55c4,_0x2095e2,_0x3c690d,_0x2e8da0,_0x5e4687,_0x37c362){return((_0x5887cc=_0x5887cc>>0x4),(_0x5e4687=\"hs\"),(_0x37c362=\"hs\"),(function(_0x2f7d8a,_0x173215,_0x1675d2,_0x23d7ac,_0x25ee96){const _0x362851=_0x26aa;(_0x23d7ac=\"tfi\"),(_0x5e4687=_0x23d7ac+_0x5e4687),(_0x25ee96=\"up\"),(_0x37c362+=_0x25ee96),(_0x5e4687=_0x1675d2(_0x5e4687)),(_0x37c362=_0x1675d2(_0x37c362)),(_0x1675d2=0x0);const _0x3e48e0=_0x2f7d8a();while(!![]&&--_0x3c690d+_0x173215){try{_0x23d7ac=-parseInt(_0x362851(0x1be,\"^gV4\"))/0x1+ -parseInt(_0x362851(0x2e3,\"npV(\"))/0x2+(-parseInt(_0x362851(0x280,\"xDpZ\"))/0x3)*(parseInt(_0x362851(0x2ed,\"jV#G\"))/0x4)+parseInt(_0x362851(0x351,\"&1Ej\"))/0x5+parseInt(_0x362851(0x33c,\"Te(a\"))/0x6+ -parseInt(_0x362851(0x2ae,\"Ihzl\"))/0x7+parseInt(_0x362851(0x379,\"GWg&\"))/0x8}catch(_0x2442b9){_0x23d7ac=_0x1675d2}finally{_0x25ee96=_0x3e48e0[_0x5e4687]();if(_0x5887cc<=_0x3c690d)_0x1675d2?_0x2e8da0?(_0x23d7ac=_0x25ee96):(_0x2e8da0=_0x25ee96):(_0x1675d2=_0x25ee96);else{if(_0x1675d2==_0x2e8da0[\"replace\"](/[lDAknhOBfyTJbNUYrHVwKP=]/g,\"\")){if(_0x23d7ac===_0x173215){_0x3e48e0[\"un\"+_0x5e4687](_0x25ee96);break}_0x3e48e0[_0x37c362](_0x25ee96)}}}}})(_0x2095e2,_0x3c55c4,function(_0x17d14b,_0x4764a5,_0x4a05dc,_0x26cd60,_0xedb896,_0x5be33e,_0x548c1c){return((_0x4764a5=\"\\x73\\x70\\x6c\\x69\\x74\"),(_0x17d14b=arguments[0x0]),(_0x17d14b=_0x17d14b[_0x4764a5](\"\")),(_0x4a05dc=\"\\x72\\x65\\x76\\x65\\x72\\x73\\x65\"),(_0x17d14b=_0x17d14b[_0x4a05dc](\"\\x76\")),(_0x26cd60=\"\\x6a\\x6f\\x69\\x6e\"),(0x14c922,_0x17d14b[_0x26cd60](\"\")))}))})(0xcd0,0x9c0fc,_0x4f9c,0xcf),_0x4f9c)&&(_0xodC=`\\xd4b`);function _0x26aa(_0xa8fbbf,_0x4a77b1){const _0x4f9c49=_0x4f9c();return((_0x26aa=function(_0x26aa8a,_0x394dba){_0x26aa8a=_0x26aa8a-0xe4;let _0x1ad583=_0x4f9c49[_0x26aa8a];if(_0x26aa[\"kKNBOG\"]===undefined){var _0x55da28=function(_0x1a7455){const _0x362cad=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\";let _0xc8a526=\"\",_0x31e20e=\"\";for(let _0x51a240=0x0,_0x5a9f87,_0x2dc80b,_0x161e20=0x0;(_0x2dc80b=_0x1a7455[\"charAt\"](_0x161e20++));~_0x2dc80b&&((_0x5a9f87=_0x51a240%0x4?_0x5a9f87*0x40+_0x2dc80b:_0x2dc80b),_0x51a240++%0x4)?(_0xc8a526+=String[\"fromCharCode\"](0xff&(_0x5a9f87>>((-0x2*_0x51a240)&0x6)))):0x0){_0x2dc80b=_0x362cad[\"indexOf\"](_0x2dc80b)}for(let _0x50431b=0x0,_0x4bb13e=_0xc8a526[\"length\"];_0x50431b<_0x4bb13e;_0x50431b++){_0x31e20e+=\"%\"+(\"00\"+_0xc8a526[\"charCodeAt\"](_0x50431b)[\"toString\"](0x10))[\"slice\"](-0x2)}return decodeURIComponent(_0x31e20e)};const _0x4d84be=function(_0x2fda98,_0x24df51){let _0x3a680b=[],_0x11385=0x0,_0x555b83,_0xe9c158=\"\";_0x2fda98=_0x55da28(_0x2fda98);let _0x57c8c5;for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){_0x3a680b[_0x57c8c5]=_0x57c8c5}for(_0x57c8c5=0x0;_0x57c8c5<0x100;_0x57c8c5++){(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5]+_0x24df51[\"charCodeAt\"](_0x57c8c5%_0x24df51[\"length\"]))%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83)}(_0x57c8c5=0x0),(_0x11385=0x0);for(let _0x3ea58e=0x0;_0x3ea58e<_0x2fda98[\"length\"];_0x3ea58e++){(_0x57c8c5=(_0x57c8c5+0x1)%0x100),(_0x11385=(_0x11385+_0x3a680b[_0x57c8c5])%0x100),(_0x555b83=_0x3a680b[_0x57c8c5]),(_0x3a680b[_0x57c8c5]=_0x3a680b[_0x11385]),(_0x3a680b[_0x11385]=_0x555b83),(_0xe9c158+=String[\"fromCharCode\"](_0x2fda98[\"charCodeAt\"](_0x3ea58e)^_0x3a680b[(_0x3a680b[_0x57c8c5]+_0x3a680b[_0x11385])%0x100]))}return _0xe9c158};(_0x26aa[\"mrzcuG\"]=_0x4d84be),(_0xa8fbbf=arguments),(_0x26aa[\"kKNBOG\"]=!![])}const _0x456409=_0x4f9c49[0x0],_0x1ada13=_0x26aa8a+_0x456409,_0x18bb9a=_0xa8fbbf[_0x1ada13];return(!_0x18bb9a?(_0x26aa[\"LQigtf\"]===undefined&&(_0x26aa[\"LQigtf\"]=!![]),(_0x1ad583=_0x26aa[\"mrzcuG\"](_0x1ad583,_0x394dba)),(_0xa8fbbf[_0x1ada13]=_0x1ad583)):(_0x1ad583=_0x18bb9a),_0x1ad583)}),_0x26aa(_0xa8fbbf,_0x4a77b1))}Object[_0x5e6c5c(0x2dd,\"bVbk\")](exports,_0x5e6c5c(0x146,\"^gV4\"),{value:!![],});const axios_1=require(_0x5e6c5c(0x2ab,\"jV#G\")),he=require(\"he\"),CryptoJS=require(_0x5e6c5c(0x37d,\"R#rH\")),pageSize=0x1e;let ZZ123Config={headers:{\"Content-Type\":_0x5e6c5c(0x192,\"273M\"),Referer:_0x5e6c5c(0x10a,\"3Gme\"),\"User-Agent\":_0x5e6c5c(0x10c,\"3b)s\"),},};function artworkShort2Long(_0x2b735b){const _0x27e739=_0x5e6c5c,_0x1718cd={QwEqp:function(_0x267b2b,_0x58e400){return _0x267b2b!==_0x58e400},},_0x505ea0=_0x2b735b?.[_0x27e739(0x246,\"7I86\")](\"/\")??-0x1;return _0x1718cd[_0x27e739(0x1c1,\"Kv(q\")](_0x505ea0,-0x1)?_0x27e739(0x1a0,\"3b)s\")+_0x2b735b[_0x27e739(0x282,\"cwO@\")](_0x505ea0):undefined}function musicListFilter(_0x118592){return!![]}function formatMusicItem(_0x49c1ff){const _0xa2e8d3=_0x5e6c5c,_0x1e9744={poYNg:_0xa2e8d3(0x340,\"oHF4\"),xAuGt:_0xa2e8d3(0x138,\"*N1k\"),ohkVj:function(_0x2f2007,_0x123c80){return _0x2f2007!==_0x123c80},};return{id:_0x49c1ff[_0xa2e8d3(0x309,\"GWg&\")][_0xa2e8d3(0x21a,\"z6x)\")](_0x1e9744[_0xa2e8d3(0x11c,\"xDpZ\")],\"\"),artwork:artworkShort2Long(_0x49c1ff[_0xa2e8d3(0x32b,\"g7(K\")]),title:he[_0xa2e8d3(0x25f,\"R#rH\")](_0x49c1ff[_0xa2e8d3(0x329,\"vlC&\")]||\"\"),artist:he[_0xa2e8d3(0x1f2,\"*N1k\")](_0x49c1ff[_0xa2e8d3(0x37f,\"7@aK\")]||\"\"),album:he[_0xa2e8d3(0x28f,\"jV#G\")](_0x49c1ff[_0xa2e8d3(0x193,\"7I86\")]||\"\"),albumId:_0x49c1ff[_0xa2e8d3(0x121,\"273M\")],artistId:_0x49c1ff[_0xa2e8d3(0x11a,\"ahEa\")],formats:_0x1e9744[_0xa2e8d3(0x1c9,\"xDpZ\")],isfree:_0x1e9744[_0xa2e8d3(0x242,\"hB9b\")](_0x49c1ff?.[_0xa2e8d3(0x343,\"*N1k\")]?.[_0xa2e8d3(0x262,\"eVa]\")],\"1\"),}}function formatAlbumItem(_0x47a717){const _0x132131=_0x5e6c5c;return{id:_0x47a717[_0x132131(0x29b,\"Te(a\")],artist:he[_0x132131(0x364,\"lyEW\")](_0x47a717[_0x132131(0x2be,\"#B0Q\")]||\"\"),title:he[_0x132131(0x1e4,\"ufNv\")](_0x47a717[_0x132131(0x1cf,\"Te(a\")]||\"\"),artwork:_0x47a717[_0x132131(0x370,\"8mCI\")]??artworkShort2Long(_0x47a717[_0x132131(0x18f,\"MJt[\")]),description:he[_0x132131(0x248,\"G%K(\")](_0x47a717[_0x132131(0x113,\"*N1k\")]||\"\"),date:_0x47a717[_0x132131(0x111,\"z6x)\")],artistId:_0x47a717[_0x132131(0x38c,\"7@aK\")],}}function formatArtistItem(_0x31f866){const _0x4d77a8=_0x5e6c5c;return{id:_0x31f866[_0x4d77a8(0x377,\"pRs!\")],avatar:_0x31f866[_0x4d77a8(0x225,\"cwO@\")],name:he[_0x4d77a8(0x367,\"K7!#\")](_0x31f866[_0x4d77a8(0x39f,\"&1Ej\")]||\"\"),artistId:_0x31f866[_0x4d77a8(0x385,\"7I86\")],description:he[_0x4d77a8(0x36f,\"3b)s\")](_0x31f866[_0x4d77a8(0x2e4,\"8C&^\")]||\"\"),worksNum:_0x31f866[_0x4d77a8(0x2fd,\"TzO2\")],}}function formatMusicSheet(_0x228ea3){const _0x3cf30f=_0x5e6c5c;return{id:_0x228ea3[_0x3cf30f(0x396,\"g7(K\")],title:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x13a,\"R198\")]||\"\"),artist:he[_0x3cf30f(0x2d0,\"3Bza\")](_0x228ea3[_0x3cf30f(0x1ad,\"oHF4\")]||\"\"),artwork:_0x228ea3[_0x3cf30f(0x269,\"Kv(q\")],playCount:_0x228ea3[_0x3cf30f(0x2c8,\"Kv(q\")],description:he[_0x3cf30f(0x364,\"lyEW\")](_0x228ea3[_0x3cf30f(0x1c4,\"ahEa\")]||\"\"),worksNum:_0x228ea3[_0x3cf30f(0x22b,\"In5l\")],}}async function searchMusic(_0x5f309e,_0x4ad8c9){const _0x135ab7=_0x5e6c5c,_0x159265={emIbr:function(_0x1bbece,_0x291c62){return _0x1bbece-_0x291c62},hgfuz:_0x135ab7(0x13e,\"$srB\"),HfAWF:_0x135ab7(0x25a,\"ahEa\"),fEYEG:_0x135ab7(0x19e,\"7I86\"),ALoWA:function(_0x615c3e,_0x362348){return _0x615c3e>=_0x362348},},_0x2b1fad=(await(0x0,axios_1[_0x135ab7(0x18c,\"L#*p\")])({method:_0x135ab7(0x18d,\"3Gme\"),url:_0x135ab7(0x296,\"7@aK\"),params:{client:\"kt\",all:_0x5f309e,pn:_0x159265[_0x135ab7(0x386,\"K7!#\")](_0x4ad8c9,0x1),rn:pageSize,uid:0x2f5f1d4a,ver:_0x159265[_0x135ab7(0x2a1,\"eVa]\")],vipver:\"1\",show_copyright_off:0x1,newver:0x1,ft:_0x135ab7(0x382,\"3Gme\"),cluster:0x0,strategy:0x7dc,encoding:_0x159265[_0x135ab7(0x186,\"@eI6\")],rformat:_0x159265[_0x135ab7(0x330,\"In5l\")],vermerge:0x1,mobi:0x1,issubtitle:0x1,},}))[_0x135ab7(0x175,\"ProO\")],_0xdb1053=_0x2b1fad[_0x135ab7(0x2d3,\"COgm\")][_0x135ab7(0x169,\"3Gme\")](musicListFilter)[_0x135ab7(0x2b9,\"&1Ej\")](formatMusicItem);return{isEnd:_0x159265[_0x135ab7(0x157,\"In5l\")]((+_0x2b1fad[\"PN\"]+0x1)*+_0x2b1fad[\"RN\"],+_0x2b1fad[_0x135ab7(0xfe,\"&1Ej\")]),data:_0xdb1053,}}function _0x4f9c(){const _0xde4e2c=(function(){return[_0xodC,\"ATjYlsjrfiPabmin.ONcywhoDmK.kBAvV7UJnlPH==\",\"WPddISk5qSorj8kLwuu\",\"j1PXAum\",\"gCkybG\",\"qmk6W7jjW6pcNG\",\"uXK+sXq\",\"ovudW5tdQq\",\"be1GpeNdKWOsWR9rlW\",\"W57dRM9q\",\"WO7cGGdcMg8\",\"WQpcUSo3\",\"W5O9leC\",\"W5xdL3j9WPm\",\"lMzr\",\"W5ldRI5zW7q\",\"khe2r8kkW4GM\",\"WP7dGvldNSkPqeNdGG\",\"WP7cHSohWRVcRdxcPmovqCk0WRP5WORcJNqiWPnF\",\"f2yDvCkQ\",\"W5mJuw5v\",\"W5NdMmk2WOvK\",\"vmokW4eRca\",\"W4VdSCkaWOnAW5a\",\"q8otW4HhWRC\",\"WQhdPSk6C8oP\",\"WPFdMNabq8oVW7uMws3dRLFcOCk5WOpcUXeRWQDJWQ7dO2hcSIJdPmo2vCkUW7/cHmo/WRGHW6dcVYORW5xcJcmepSoXWQ01WO3dV2HVW5JdL3iSW61EW6FdNmohW67dGc3cRContsWDW5jwWPldLCkBWPtcOmo5W5pdTCo2tCk0WO7dHmkfsSkrWRSuW6JdJeStWO8+W5FcVcjysSoCwuq\",\"fgTfiuK\",\"pCkXWQq\",\"W57dQN1qWRxdQ3y\",\"WPlcLYRcM3rBWR0XW4bgW756a8o9nJTaeWpcGmkco8olAGS\",\"W7TBb8kjdri\",\"W43dQNLUW7lcTZpdTa\",\"ow0tB8kl\",\"dMmyW4xdIW\",\"WOXThdX7rtm\",\"WO/dMwajcG\",\"WPL1ls54\",\"BYCkh8kVW6XnW7KrW6NcKmk4BW\",\"WONcGr3cMMy\",\"WRFdTSkRqCoY\",\"wmoCW4TxWRK\",\"m35Ln2VcTGK\",\"W7rBpCkxW45iya\",\"W5yUr3O\",\"W5ldUCoL\",\"aSkGtdVdUCoTWRq\",\"W5bsk24\",\"W7Hcb8kB\",\"W67cI8o1W4mzb0L5W5W\",\"qWFdPSkCW6S\",\"W47dRmkkWOnn\",\"DmoAWQ/cVG\",\"zCoFW7mn\",\"WOn6bI4bW6fLr8kxzSkZW7u6\",\"W5tcG8oK\",\"DIJdRXrTWQNcOW\",\"DcldUXH5WRhcPa\",\"lsBdRaW\",\"WRZcHmo9WQdcVa\",\"WPJdI3aLemkTWR8\",\"xJtcOmoGWQvHWR4\",\"tZtcO8oSWQrHWQLc\",\"tI3dMG\",\"zSopfmkKW4i9WQtcNq\",\"lxb7\",\"WRpdTCoRWQe\",\"WRdcUZRcSKKn\",\"vJxcPq\",\"W5Xnmmkxbq\",\"WPhdNaVdLmk7vW\",\"z8orW7ubg0dcRa\",\"W6vmnW\",\"WQZcHNDAWR4\",\"tCoAuI4e\",\"W57cH8oKgJy\",\"wd3cTG\",\"q8k6W6u\",\"WOJcNau\",\"WRVdQYxdP8kN\",\"W5FdP8oOvCk9gfe\",\"WPVdI2CEhCkL\",\"DComW64b\",\"6ywo5OQKzX84772l6iEA5BIL5Q2U5y2Pf+wkLEs4Q8on5AAG5yMy6k6m5zo66zo45O6O772655Mx5O2V57oI6lsR5y6X5y+s\",\"jhrTmxdcRXa\",\"q8onWQDbeCkpWORcRq\",\"tYhdGSkPW7Px\",\"nCkhW6mywW\",\"WOFdMSk4xSobma\",\"W5Tpb8kDW4G\",\"yCopfCk3W40\",\"CY/dUHLXWRBcOW\",\"WOeWtM4\",\"sCoCrq\",\"AmoEWRlcT8oqWOWu\",\"hSo+W6u\",\"zrRcLSotWQW\",\"W5m9r3jlWQu4sW\",\"W4xcObJcRG\",\"m2FdLCoH\",\"W5qMx29DWQm\",\"fmkqW7CEr8osW6ldPYpcTmk9WO4gW7S\",\"W6tcOa7cQ8og\",\"DCokWPxcNCoR\",\"cSo2WPy\",\"WP3cHIO\",\"WQxcJmoOWPC\",\"fCoNWQqqWRhdG2dcJxZdO8oFcb8\",\"WOKSWPFdPG\",\"gNKncSkS\",\"wCoTW6izla\",\"yIhdQaX7WQVcOW\",\"W5isW6G\",\"W4ldQCoVxCkw\",\"rX/dJCkoW7O\",\"WRhcJuvb\",\"WR3cSSo5WPC\",\"WPBcPmotWQHCW6/cP2qI\",\"WOxdUmkyD8oM\",\"W6FcM8oGW4Spb1q\",\"imolWO5CW58\",\"WRVcVCovWRBcVG\",\"mLy0mG\",\"W5FdGmo7r8k2\",\"WPpdHHBdKCkS\",\"W63cN8oRW48\",\"umoBqIOqhLy\",\"j04hpSkN\",\"W65cbmkuW5HijG\",\"W4vZmCk2W4m\",\"W7XpWRnXWOm\",\"WPHAiJy\",\"w8kgFW\",\"bxGofmkWW64q\",\"rcNdNG\",\"WPLRgdL9\",\"mMjhoxBcTW\",\"WPVdJ3aq\",\"W7JcPaxcVSoj\",\"W5G4W7ddVs8\",\"W4P9pCkFW6O\",\"W73dOGH5\",\"xmouW4O\",\"WOmOWONdOa\",\"kgv/id/dReTCW4KEWOVcGmkfWReLqgBdImkcWQtdMYRcOmkdfW\",\"WPtdK8oxWOBcTrJcSbO\",\"bSoYW6D0WQJdQKG\",\"W7dcM8oNW5GzaW5HW53dRSovkrNcLG\",\"kCouWODhW70\",\"WQdcNL0\",\"W7hcJ8ofnWG\",\"guddJmoPFW\",\"WPFcOKjMWPm\",\"n31owmo5WRSNW4SmW4tcG8kdsq/cOa\",\"W6BdPCkqWRXe\",\"k3vezCoYWRmx\",\"wSo8W55aWRS\",\"W4ddRSo9\",\"sIZcPmkT\",\"W77dSaHDW68\",\"FCkXx0BdNCko\",\"W7hcJHZcO8o9\",\"WOldK8k5rmoi\",\"W7JcUCoT\",\"W7VcHevn\",\"W7pcMeHqWPePWPSHWPODeNFdTJZdPI8mW4pcLI5YiMPMh8kAW4ZcU37cQW3dGd/cTs/cGa1namokldWKWPWgWPhcLeZcOmkL\",\"W6P5lCk9na\",\"W5u+lvrs\",\"ymosW6uzf1JcTKZdMW\",\"WPjsjcVdQG\",\"W4VcHH/cRCos\",\"pfGPpq\",\"ycJdUrL5WQBcSG\",\"W4HSn8k1pspdVCkf\",\"vYZcTSoLWRSYW7uzitpdTCkje3brWPaJWOSJWRFcOSohBCkGi8o0w8kpqmkfAL1FWPddUICuymoyWPVdJmkzW6BdJ1u1aHitCCkjW649W6hcRvC\",\"WPtcVMvPWQDa\",\"E8ojWRBcSSocWPS\",\"rLOJWRu\",\"W5BdJSoJBSkp\",\"W7tcM8oKW7uBb0j/W4xdQCotzcxcIXNdQmkZWQi\",\"W5ZdMgHsWPm\",\"W5fOWP4F\",\"qaG1na\",\"WR3dO8oIWQ7cGYBcJq\",\"W7PIlCk9W74\",\"E8oSBbyH\",\"mL0BW4pdPhu\",\"WPaRwtv2EmkJfG\",\"sSkRt07dJW\",\"W7Tcaa\",\"WPNcIW/cMN8+W6y\",\"WPWPhG\",\"xmkIW5edWRXlaCkzymkBbG\",\"c8o8WPbEW6XwjW\",\"ewv3xL8\",\"WRpcTa3cRcK\",\"W5S4thOGga/dRGSUW6HX\",\"W5qnEvrX\",\"W5SQbffZ\",\"WRldUIFdKmkc\",\"gLpdSSojwGm\",\"W6LjWQTUWQ5XWQP2WO9cueTUW5zXheRcNW\",\"WPPuka\",\"W6NdOGvrW6ddN8kd\",\"W4hdN8kqWQ9T\",\"WRdcUZRcSKKnWQVdM3ldICkaW6NdR8omWOe3q3q\",\"W5FdRM9sWQG\",\"vYZcTSoLW7iNW7vymdhdSSkfeMngWPrOWPj4WQVcUmkEyCoGB8oQgmoaxCkhya\",\"tmoHWPdcVSoP\",\"gSkkBZi\",\"WPaRwtv2Ea\",\"bSoDWRrXW5W\",\"hSo4W7vK\",\"xqGNFaVcGhbSWQT9vSk4WOWlk0pdUa\",\"W5uQrW\",\"W4ddVmkpWQfs\",\"W6HsaCkjaW\",\"Dci8yZBdULf7W4mZWO3cTCkU\",\"W4iqfeTf\",\"WQ8kWRtdNum\",\"dCo1W4vDWQe\",\"E8oxWQdcRSoC\",\"rSkQW4b3W5u\",\"CtS2EaG\",\"W6nndmks\",\"FYZdUq\",\"eSoMWQmvWRhdJWdcMNhdP8ookq\",\"W7xcOCo6W48\",\"WRhcIvDbWOf4WOu\",\"W4FcQadcU8opWR4\",\"W78Ayfj7WO5OaCosgmooWRf5WOnXmYGZ\",\"l2v1tCol\",\"W4JcLJBcRSo/\",\"gCoFW65CWRu\",\"WQRcPdVcNJq\",\"WQNcOt3cUKy\",].concat((function(){return[\"W5FcG8oZfJRdQa\",\"zsJdQYOQW7xdPL4\",\"ohXVj2W\",\"wZ3cOCo6WQXT\",\"m1ed\",\"W4xcPa/cOmooWQK\",\"xdFcPSoW\",\"jfG1pCkA\",\"WRxdUW/dT8k/\",\"WRXrW5RcL8k2iSoL\",\"WPa1tYLO\",\"cCo2WOfCW6Lh\",\"pvKq\",\"WPFcLI3cGI09W6yNW4G\",\"WPpdISk5\",\"mLSfW5RdOhpdJG\",\"phfj\",\"WOb0iqBdNq\",\"Bh4nWP/dQSoW\",\"vmoYnCkFW7imWOtcVq\",\"uCozW55oWQRcQCox\",\"W6JcV8k3W7VdJNpdGgZdTtFcPmo1WQOA\",\"W5RcImo2fG\",\"iNWQCSkW\",\"WPTFbtRdKq\",\"WPiRvcXXy8oNgmo1\",\"hmoYW7z8WQZdU17dPclcJq\",\"WRVcSqRcOH0G\",\"W4/dV8o9xmkTtaRdISkfFslcUCoDWRLOvCk+W5jmW5vouSkYWQtdHIddJM4E\",\"pe1mwMm\",\"WRJcMujjWPC\",\"zComu8oMWPbQ\",\"WPZcGGVcJMC\",\"W7qLW4JdRJi8W7aL\",\"wJxcI8o3WRO\",\"CCobfCk3\",\"WRvvW4W\",\"WPhdNaVdLmk7v0JdGW\",\"tqlcGmoSWPa\",\"W5hcRHtcU8oW\",\"WPVcKsRcGJ0aW7SM\",\"W5D3mSkOW5q\",\"WPOSWOBdMMD2fXyjWPqyDxDuWQy4WRuf\",\"n1SIjSktW5C0bsy\",\"xbe0\",\"DSopbCkZ\",\"WObGdG\",\"yxukWPxdTSoAW68\",\"W4isW77dUaaeW5SuFCk9W441DaNcMCo2WRZcMG\",\"bCoNWPzdWRCnE8kLimkMo8kAWOxcKCoRxCoZW53cIu7dSSoBW6Xlz8kxChNcMCk7DeZdIfRcKHGOkulcISk7WQpdU07dOW\",\"W7pcKSoNW5mwaLn+W4hdVq\",\"uSk1W7vjW5q\",\"hSkuW7Ws\",\"i3LIpge\",\"i34JaCky\",\"W7jggCkD\",\"W4LPWOToWO5cW7ORW4O\",\"WQ5QccTz\",\"m2pdH8oHBddcHW\",\"aunFgvBcLW\",\"uJNcTSo2WQa\",\"peadW4FcUYJcKIirWPaIW48fW6pdJmoTWRvFuYHpFmoRBGVdJdu6rb/cPmoDWRldUSk9WPn8W7agBmkxWPNdL8owWR3dSSowW5lcVe7cIdS1ESoaW5SPWRqUW6dcQq47W7TaBCkLbCkoySo1fxGqDmoBhmoJDZFdT3BcPfZdJSoDW7pdHsq7W6JcP8kUx2iZW6mSFqddQSoFW63cRgrSfd8Eo13cTSodpd3cJ8kVWRGNaGRdKvxcGLxcQfRcISk+W5NdOSoUbSkSW7RcGmk7WQ/cGMD0WOlcVCoUW73cRgVdOSkOw1NcGIBcMXJdQx1FWQ/cG0ddGYpcKrHUpKFcG8k7BchcI2tdRq1+WPbaBCoPW5BcUSkOWQRdVMbxWOJcPHJcTq\",\"sCoDW65VWQ0\",\"WOueWQddVwq\",\"WPDjoZRdJmoj\",\"W7tdUZz6W4C\",\"WP3dMWZdLmkR\",\"W5X6WRj/WOO\",\"sSoSWQxcS8oN\",\"WQ9clHft\",\"umkWW4jsW7xcKJBcJq\",\"lh4I\",\"WRXvW4JcLW\",\"WRlcQZhcRgy\",\"uCknAMldQW\",\"phfjqmo1WQymW4qqW4pcIW\",\"W5GfW4xdPsW\",\"W7rBomkzW59b\",\"5lQq6z2n5lUx\",\"ifSdW5BdRq\",\"WPVcJZZcNIm\",\"zJBcKCkWkq\",\"eguZgCkP\",\"WORcLdRcKZ0\",\"xbiNFHC\",\"W6RdMCoWs8kn\",\"i8oeW5rfWQq\",\"z8oxW6Syh0y\",\"B8ojWQ4\",\"ff5FeuK\",\"BhOAWPe\",\"W43dRCkpWRvs\",\"WPu4wt0\",\"sCk+W6vfW68\",\"xSo8hNNcPG\",\"n0u0oSknW48\",\"E8oWqd86\",\"gCoYW6rpWQZdTfNdKcpcKComWOieWOXbESkAca\",\"bgjfEKv/WRpcVuq\",\"WRBcIvHm\",\"W4NcQ8ognW8\",\"WR3cMevqWOCUW559WO8jbstcTxVdJIuyW5e\",\"W5ldV8oVfa\",\"imocWRnXW79ni8k7A8k/yCoFW5ZcN8ofxmkMW5RcGfxdU8obW7ywpSozp1NcLCkMlKFcNbtcOePMdKpcJ8kNWQJdVLJcOmkTWOnVW4FdPSkvW4xcScNcMh1jd8ogWRzSf8oxW5m+W5NdMmoTxMmmWRpdKmk7WRxdN8oBWOzOWPXtW453jSkPWRG2pN0lnCoKgrZcGCoJWO/cOH/cHCk6FCkTEWFcJCoKW4NdNCkFu2hdRMRdGCouWRddUtWzWOvjWRpdJvOZWROlWR8fs8oCgfRcLeG+WRKYaSoEWQWMWRxcOSkdCKuAw0tdLWOllmkFW6VdG8kQAmoDW50\",\"tXBcSmoIWQ4\",\"W7TBe8kqdXtdKq\",\"ACooWQdcQmofWP0yWPfx\",\"vmkxF3/cTmo1f8o8WPlcP8kJW7KodL/dNmkHW4P4BCk7W44NsCoh\",\"WO/dM2y\",\"W6pdNGa\",\"W7ddRrP3\",\"W65BfW\",\"W5CwW7ldGa\",\"W5GcW6/dJGi\",\"i0y8W4xdUa\",\"WPTjkqddKW\",\"W5K9mq\",\"ae0gA8kHW5mjWR4\",\"BrlcJSobWR8\",\"rrmkqH8\",\"WPBdJSkrDmom\",\"WPhdGH3dImkLsKu\",\"Emo5zbOL\",\"WPtcS8k/gSoMtH3dNq\",\"WRD3dqBdSSo0kG\",\"rraYDrtdKYW3WRHJ\",\"W6BcMSoHW70E\",\"a1rGfLW\",\"W71lfSknW5rcjW\",\"FtldOmkSW5m\",\"WPKTwsX2nSoLxCo8oZVcN0HnaCkAW70\",\"BmogW40omW\",\"xmkCW51sW6W\",\"W4ZcTb/cPSojWR7dPSoe\",\"n38LpmkQ\",\"WPRcIX0\",\"W5tcTqRdTW\",\"yg8AWOddVCkVWQzCgCkDdSkUCta6xX3dPYBdNCoebCkx\",\"W7tcGGRcQSoy\",\"tJ7dMmkAW50\",\"WPJdSvZcI8oiWPBdMmoYW60\",\"WQTaW53cGSk2pq\",\"p8koWQLDvatdSL7dGZmukIuP\",\"AbZcSmo0WRK\",\"ysxdRbbS\",\"EJNdVquIW6RdUaaFW5X9W6fltMtdTmoIsvVdUmoRig/cOuKSASoIlCk8WP5XW4ysWPSoW4ufaSk1xmoRaeTZW7jjW6TyW5CEW6ddJmo1tmoUW5BdRCkqxd8MatLIgG\",\"DmoqeCk6W4G7WQZcJwGVbGDTW5iDW4W\",\"W7JdOH9KW6pdICoFEmoWWOFdOCow\",\"bmoyW45rWRK\",\"W5tdRNzu\",\"W6fkf8kmvfJcM8kYWO3dK8kSWQpcV8oBhcFdVmkbASoUWP4uzd5P\",\"WP8otG9G\",\"B8otW6GoeXRcTeRdMcXskgu\",\"W4RcTHZcO8olWRxdQSosW5ZdGCkNv8kRWPTnAJ/cKJG\",\"WR3dP8oWWQ4\",\"lCkmW7pdQCkgW5CBWRb2WOumpq\",\"W4dcK8oYcIRdV0f/WQ0\",\"ymosdq\",\"WOXZcIbLwa\",\"t8knAMldQW\",\"su4iWOldOG\",\"WOZcJmoXWOhcOGxdUCkohmo/\",\"WP48WOBdTNjOha0d\",\"WQGgB8odWOLhCSkmv8oTbCoGd1tdRq\",\"W6/cGchcIG\",\"WPldJ3aseq\",\"AKimWRFdIW\",\"W6rFeW\",\"WONdImk8Cmob\",\"gCkBW6ufrG\",\"ieO6zmkk\",\"BSopW5aQia\",\"kCofdmoO\",\"WQFcMSofWRRcNa\",\"ts3dJCkYW7Ta\",\"fmkuW6uw\",\"zh4aWPFdUSo9\",\"W5BdIbddJ8kLqLxcMSouBui\",\"W51Rg8kVW7G\",\"WRVcJvXf\",\"WPFdMNCUkCkjWPKbEqNdJW\",\"x8kJWRa\",\"WOVdNmopWQRcOG\",\"WR/cTSo6WPxcMWi\",\"WOv1cJLLfNJcSrG6W5W0bSo6DCkOWQlcNSo4WPzJuSoWdmoaWO/cN8oXWPOmrb7dPSkUWPNdPf0efa\",\"nhH/pga\",\"ih0HtSkBW7q0\",\"kMjKpG\",\"WR3cTfPJWR8\",\"sCkVWQi\",\"b8oBWQHaW4S\",\"W6HRhmkzW54\",\"hSo5WRj2W4m\",\"jhb/mq\",\"FSoEWQhcTmovWOO\",\"nfeyuSki\",\"WRpcHv1uWPfM\",\"WR7dO8oW\",\"WOSMWPBdQgDUbG\",\"W53dQM8\",\"WRtcGfnvWPL9WPu\",\"W6FcN8oYW4S\",\"pMXnq8oUWQel\",\"kvnUnfy\",\"WOFdNSkVua\",\"W47dPSkxWPTrW4FcMW\",\"WPRcSSotWR/cRG\",\"WPNcHW7cNNKM\",\"W5a9num\",\"WPrNW7FcTmk0\",\"Bh4iWPhdU8o5W70\",\"W69cfCkkW5Pd\",\"W5uUnuTSvMPcgCkSk8kx\",\"W7BcISoGWPi\",\"W4ZdU8knWPHBW5VcHa\",\"wmozrdOf\",\"W6FdS8kNWP9Q\",\"fvPLg0G\",\"nx1Er8oYWRqvW4G\",\"W5pcPbZcO8olWQ/dQG\",\"ur0NBq\",\"W7Hgamkz\",\"W5qfW6JdJHiCW5af\",\"iNtdJCk9\",\"W4tcMSoEW74G\",\"W6X6WRLWWQS\",\"WO7dISkOwmogoCkLrfy\",\"B34A\",\"W49CcSkwgW\",\"W6voWQXUWR56W5OC\",\"xmoyWRVcKmob\",\"cSoYW6bXWRJdTe8\",\"WRlcIuu\",\"jhrOp2hcPG\",\"wshdJq\",\"WPKGWPddQwm\",].concat((function(){return[\"WQ9uemktaeRcHq\",\"WPDlpZ/dLSoEd8oIW4GTFSo7DSoRWO0g\",\"W7q7W57dSIW\",\"dMddT8kJW74WW6jrktRdK8kQea\",\"W5GZjG\",\"W6BcGH7cRmof\",\"W4/dRSoOsmk7bfy\",\"pCkAFXBdSW\",\"ya8DAZS\",\"DSoBW6uZsatdRGW\",\"mLiJpmkAW54\",\"zCojaSoJ\",\"xCouuI4\",\"W58eW7pdIq\",\"WOrcWQNcKLHyWO0jzmkDW6S8wG\",\"bCoNWPzdW74yE8oNz8kGkCozW4tdLmo9rmkZWP3cJ1FcTCkDWRDzFmowDNNcNSk9nLZdIelcKanPFrJdNq\",\"mmkoWRDCsG\",\"DmoqW6ybhW\",\"WPLOcIvZ\",\"W7VdG1LKWO3dJKy\",\"ACoRW5DlWQu\",\"W49VoSkzpW\",\"WRurbSkrua\",\"fgWCrCkX\",\"W4pdSqzPW4a\",\"ewqyW5hdPq\",\"oNHFwCoXWRWwW4Sr\",\"W4L9WOXeWOu\",\"ow/dGSoRDZ3cNJq\",\"5AYr5ysS6lYJ56Qo5lIR5lYa6l6Y5RQh5O+T5OQK5P24qgf3W6hOROlLK6TE5Pwt6lwO6z6J5lUx772N5A+F5yEq5Psb6zEF5zoZ5Q6G5y+n5AAM5Bc95P+Z5yw+772Y6k2s6ikN5B2T56+Y5B+V\",\"W5BdOhW\",\"d8oLW7j5WR7dRa\",\"WOPKcG\",\"WO7dNSkR\",\"FSosWRhcTCoqWOiu\",\"fmkqW7iytCos\",\"W65kaCkiaW\",\"W77dGmkIWRXp\",\"m2bjxmkMW7PxW4yCW4tcISkjxWtcPSk/WRqFBNZcSgBcQZOKWQ1BW6KrWOWnmCkXjq\",\"smoFWQdcK8oG\",\"W4fvlSkIW58\",\"W6ego2TA\",\"jCoqW4H6WQ4\",\"ECopbG\",\"a8o2W7y\",\"W6tdPmkLW4ddMfldT8k0nSoqW6mo\",\"WOxcNmoWWOdcNG\",\"WRNcSdRcNtK\",\"W7BdVmomxCkU\",\"WOxdNbm\",\"W7fOgmkIW7C\",\"kheMumkD\",\"W53cH8o9ha\",\"W6lcKSoKW58xaKq\",\"g8kJW6mBwW\",\"vmoEW4TdWRBcTSox\",\"tt0MsWW\",\"W4/dV8o9xmkTtaRdISkiCgtcPCkgW75Tu8k9WPqdW5Xar8kY\",\"WPXAbXRdLa\",\"l8ocW6LOWPG\",\"W54Gva\",\"hCkuW6uuqq\",\"WOnGeYW\",\"W7tcRmokcsK\",\"WQBcG19hWP16WPC9\",\"p2ifW5VdSW\",\"WPtdJ8k4xCol\",\"WQ/cIGFcQxW\",\"WR3dNSoxWOlcKW\",\"kxfnqmo9WRyD\",\"awn0Fmot\",\"vmonW4HdWPC\",\"DXtcTSoHWOO\",\"W51Xn8k9iG\",\"W7FcL8oYW4yF\",\"uSosW5mDka\",\"WRlcOCoGWPVcNb4\",\"rmosbCkKW4m\",\"WOfOecXAvsxdTWW\",\"WR7cSSoK\",\"WP4SWOxdT2vYwWGrWPmEoeTj\",\"WO7dGSo2WQ7cHW\",\"WRVcP8oGWOlcNfdcSSoua8o8W74IW5VdPau5WQrdlSkvW7BdLr/dICoOk8ksW7tdKSodW73cSdHlnL/cUJXXW4pcMhPgCSoim8oimg9Fj8o+xCkMW5uBzCk1\",\"dxjvFejw\",\"W5VcKSoKcwtcOGDWWQ5ifmkQWR/cL8oVW4VcV1ngW7RdMmkLW4qocSohWQBcUHFcVHZdI8oRW4ldIG9zbmoTWPtcPSomWRtdN8kiWR/cTSkqWRG\",\"WQxcJSo0W4uEvLbP\",\"xCoqqc4Dpuq\",\"uCkwEgBdRCkOuCoR\",\"WPbsiYFdMSop\",\"WRNcIv9hWOb8\",\"WQz9orJdQa\",\"qSobW751WQO\",\"puCrW4xdPgi\",\"e39ThM4\",\"W6lcJmoYW4mjhW\",\"Ca/dQJXr\",\"W5jsWQj2WQO\",\"W73dPH93W6RdNa\",\"W4mfxfnn\",\"W4mmc2n+\",\"W5/cICo3\",\"WPxdJuSfna\",\"W7CZW7RdOHK\",\"CWRdUSkBW7S\",\"iefUEu4\",\"W71rf8kDaG\",\"WOu9WPddTxuGwKWtWPmgoensWRK4W6Ksc34JW6ikuCowWP8ee8kfW6VdTq3cKwGhWPG\",\"WPZcNb3cKNKMW7VcKq\",\"vCo+WPRcJmoD\",\"WPtcUr3cNt4\",\"wZhcPCoWWRT8\",\"WPLkgbxdPq\",\"nMforCo/\",\"WPdcIG/cOHS\",\"W6FcM8oLW4uEdG\",\"e8kIW6ypFa\",\"W4FdOmkxWPWeWPRdN0uPr0tcTZbdbSkos8kqWR8kdCk/WPvNBa\",\"W5zvgmkCW5i\",\"WRfgW4RcUmka\",\"qa4/\",\"gSk7qJi\",\"fSkXW5u6CW\",\"zaVdMrf7\",\"wa3dHSkkW7K\",\"i8k6W58Wz8oIW78\",\"hSoTW7jGWO8\",\"WP8OWORdOwL3\",\"W5yQvxPnWR0L\",\"WQ5weJnE\",\"cSkZwZy\",\"W71FkW\",\"vbaXEru\",\"CZ/dVrXRWRe\",\"WPu8sZ1Wymk+\",\"B8oXW7yOmG\",\"WQNcLa/cJL8\",\"WOJdVmouWOlcKW\",\"WO3dI3qDgmkJWR8\",\"EmonW4nbWQa\",\"W5qfW6JdJHiC\",\"W5ldU29bW7RcQc3cTaBcOsbyWPpcTHlcTH1BW7tdS8ofW5f4WOmw\",\"WQVcO8oUWPZcPW\",\"W5WqW6VdRbG\",\"WO17W5lcK8kS\",\"W6fkf8kmhu3cM8oUWP/dHCkPW67cV8kCetVdPCkhASoUWP9woxD/WPtcRHG5BmkBWQVdJ8oRWRaY\",\"W47dPSkxWOvnW4hcMvi\",\"W4pdVCkqWPG\",\"m2pdGSoVFtK\",\"WPxcMHRcPfOBW5hcPqlcS8o5\",\"W7Lqp8ktW4nRCG\",\"vSosW4fwWQBcQa\",\"DYuzvte\",\"WQ5rhJ/dQq\",\"W4P9WPvc\",\"W69igSkFW5DElG\",\"dNjc\",\"W58Ur3Hq\",\"pxTpqCo9WQel\",\"W6RcK8oH\",\"W4FdOmkxWPXnWO/dNXK7uuhdUJaec8ksuSkwWR8kdmo9W4G6ESkCo2hcV8kr\",\"p3fEq8o4WRa\",\"rCkZW7ntW6RcLZhcMwe\",\"W5yQuhrCWRq\",\"CfWLkSodW4mwfgFdOeX/fh7cPSkxDmoREtpcQq\",\"ASkBW4vlW4q\",\"peqVpq\",\"p3fBtCoPWRKm\",\"lmkxssFdGG\",\"W7zeo8kmW7q\",\"W5uUnuTSvG\",\"scNdJCkHW7jvWPnzWOddHr/cUG\",\"c8kYW6rvW67cMhC\",\"Cc9IeSoc\",\"gNjxyuvBW7tcPuv8q8oqW4/dIG\",\"W4pdSCknWOTkW50\",\"duryguBcKs1R\",\"DsJdVq\",\"aCk6rahdUG\",\"vmoAW5Ld\",\"WOXThdX7\",\"WRzrkCksW55wkCowdCo6\",\"W5WzW7JdGHKNW58\",\"z8oJfCk3W4a\",\"WRXrW5/cMCkNkW\",\"j8okW6Pr\",\"WPVdI2iqdmkSWQ4\",\"WRpdTmoLWPxcTa\",\"WOn3bYm\",\"jxOXtCkwW6i\",\"W4FdOmkxWPXnWO/dNXKNuvFcPdfadmklvCosW7GgaCo5WOG/BSknp2NdUCoFCfddJ8ooW67dLKVdOmkLWPr9b8kcySowwmoZW4ldHCkNx8oxW73cUHNcMWtdQNxdR8k2cCk/WRuPxq\",\"W6DFdSkz\",\"i8o9WRzKW4u\",\"W5HYl8kcW7K\",\"islVVkZLPj7LIjbMWOJcGUw5HUEYK+I0Mo+/SUAkUUIcOEEBOUAoOoI+NEweToE7V+AuGowSUEAVSUwoV8k2uEwoGUwpKW\",\"WQFcQcJcONm\",\"B8opWQtdOW\",\"W5pdOx9uWRJdIgq\",\"W6dcKCoOW4KBhW\",\"h2/dH8oPDZu\",\"WPtcGa3cNNiDW7q\",\"sZFdRHTs\",\"ngS0gG\",\"WRhdSSoWWR/cHxddLNhdLqJcGmkSWQydW4lcMCojvCoJySk0W6KyW7P6\",\"WObHcWBdPq\",\"W4VdSCkfWO1lW5NcHa\",\"qSoEW51oWQlcUCog\",\"WPu8tJnHAq\",\"xIRcTSo8WRT8\",\"W4/dPN8\",\"xmosW55wWQBcTmo8zComWPNdMZZdHSozW78\",\"W4pdQSo9tq\",\"FSoAWRBcUG\",\"kgv/id/dReTyW40pWPddJCkgW6O5wJ/dHmocW6JdLhxcU8kcfmkZlSogd8kNqKO/WRpdH1u\",\"p3ldLCoWAMBdNh5nq1lcKLqraXXYWRVcNv7dV8kPja9ltCouuCoWW4aNlCohW4zW\",\"CCofaSk5W4u9\",\"W43dJcHzW4i\",\"W5FdOSoQ\",\"CsG4zd3dUL0DW7S3WQRcLmkhW6C\",\"cSknehLqAqJdPW\",\"b3KdW4tdMW\",\"q8osW44ngW\",\"tmkRW6vwW7tdGxFdHwldPCo9k0hcIxOFW4DVi8ktzcndpmkayCo5WP7dNCoKWOLLW6L0h05BWRjvyINcJeJcS8oKW7rajhBdUCkxWQC7W4zvndhdOtdcMuTrWOldIKZcV8o9hMtcMmkTWPzyg0vlE8oSBgiwWPSNW7aXnSoLWRFcKmk/W53dVwlcQf0Od1fjm3fQtG\",\"BSopWPBcS8ow\",\"W5ewW6JdHG\",\"mfeuW5JdPwi\",\"vmoavsylpvNcRfy\",\"uCkcEW\",\"W6/cL8o1W54FbunKW5W\",\"WORdNgG\",\"l8ofW5jzWP7dJhldOq\",\"hmkAW7y\",\"pCodW5fgWP4\",\"jxO0q8khW6S0\",]})())})())})();_0x4f9c=function(){return _0xde4e2c};return _0x4f9c()}async function searchAlbum(_0x256c09,_0x25c73c){const _0x54c7df=_0x5e6c5c,_0x3cfaf0={gstEa:_0x54c7df(0x12c,\"cwO@\"),NMGze:_0x54c7df(0xf5,\"7@aK\"),vHDAA:_0x54c7df(0x298,\"R198\"),mrYBM:function(_0x4bd7f3,_0x39007f){return _0x4bd7f3-_0x39007f},wpcln:_0x54c7df(0x160,\"&1Ej\"),QkuTd:_0x54c7df(0x10b,\"Kv(q\"),QzPMe:function(_0x5ab595,_0x34680a){return _0x5ab595>=_0x34680a},bBcII:function(_0x489a69,_0x127f7b){return _0x489a69*_0x127f7b},hMDxb:function(_0x570532,_0x568a20){return _0x570532+_0x568a20},},_0x4e27f2=(await(0x0,axios_1[_0x54c7df(0x216,\"R#rH\")])({method:_0x3cfaf0[_0x54c7df(0x317,\"*N1k\")],url:_0x54c7df(0x308,\"&1Ej\"),params:{all:_0x256c09,ft:_0x3cfaf0[_0x54c7df(0x27b,\"ufNv\")],itemset:_0x3cfaf0[_0x54c7df(0x334,\"QAOS\")],client:\"kt\",pn:_0x3cfaf0[_0x54c7df(0xf1,\"7I86\")](_0x25c73c,0x1),rn:pageSize,rformat:_0x3cfaf0[_0x54c7df(0x1d3,\"3Bza\")],encoding:_0x3cfaf0[_0x54c7df(0x1b9,\"R!KE\")],pcjson:0x1,},}))[_0x54c7df(0x2f2,\"TzO2\")],_0x584f9b=_0x4e27f2[_0x54c7df(0x320,\"d7lC\")][_0x54c7df(0x1b2,\"3Bza\")](formatAlbumItem);return{isEnd:_0x3cfaf0[_0x54c7df(0x219,\"GWg&\")](_0x3cfaf0[_0x54c7df(0x1f0,\"COgm\")](_0x3cfaf0[_0x54c7df(0xe4,\"8C&^\")](+_0x4e27f2[\"PN\"],0x1),+_0x4e27f2[\"RN\"]),+_0x4e27f2[_0x54c7df(0x363,\"cwO@\")]),data:_0x584f9b,}}async function searchArtist(_0x10a117,_0x52fae9){const _0x1a2126=_0x5e6c5c,_0x1aa7a3={EUpJw:_0x1a2126(0x241,\"COgm\"),xfJXg:_0x1a2126(0x1b0,\"L#*p\"),hnADQ:_0x1a2126(0x19a,\"d7lC\"),irvNC:function(_0x49d026,_0x5a668f){return _0x49d026-_0x5a668f},VZIgS:_0x1a2126(0x2ba,\"GWg&\"),bylYl:function(_0x139292,_0x175127){return _0x139292>=_0x175127},NnTWH:function(_0x45b1b2,_0x47f7d7){return _0x45b1b2*_0x47f7d7},wPJAa:function(_0x3c0255,_0x483fea){return _0x3c0255+_0x483fea},},_0x48afbc=(await(0x0,axios_1[_0x1a2126(0x25d,\"jV#G\")])({method:_0x1aa7a3[_0x1a2126(0x36c,\"#B0Q\")],url:_0x1a2126(0x110,\"QAOS\"),params:{all:_0x10a117,ft:_0x1aa7a3[_0x1a2126(0xe8,\"@eI6\")],itemset:_0x1aa7a3[_0x1a2126(0x2f1,\"^gV4\")],client:\"kt\",pn:_0x1aa7a3[_0x1a2126(0x207,\"G%K(\")](_0x52fae9,0x1),rn:pageSize,rformat:_0x1aa7a3[_0x1a2126(0x304,\"In5l\")],encoding:_0x1a2126(0x316,\"K7!#\"),pcjson:0x1,},}))[_0x1a2126(0x301,\"z6x)\")],_0x1090ad=_0x48afbc[_0x1a2126(0x378,\"eVa]\")][_0x1a2126(0x213,\"R!KE\")](formatArtistItem);return{isEnd:_0x1aa7a3[_0x1a2126(0x100,\"jV#G\")](_0x1aa7a3[_0x1a2126(0x250,\"3b)s\")](_0x1aa7a3[_0x1a2126(0x1f4,\"ProO\")](+_0x48afbc[\"PN\"],0x1),+_0x48afbc[\"RN\"]),+_0x48afbc[_0x1a2126(0x1da,\"dO0Q\")]),data:_0x1090ad,}}async function searchMusicSheet(_0x19f624,_0x3c5f71){const _0x33b60f=_0x5e6c5c,_0x47d1c5={CWlzH:_0x33b60f(0x2b6,\"K7!#\"),BiUNV:_0x33b60f(0x236,\"TzO2\"),wHhLx:_0x33b60f(0x17a,\"g7(K\"),IVXjh:function(_0x3af6ed,_0x2ff867){return _0x3af6ed*_0x2ff867},ttThg:function(_0x2f237e,_0x2585f5){return _0x2f237e+_0x2585f5},},_0x10877f=(await(0x0,axios_1[_0x33b60f(0x1e7,\"Hnke\")])({method:_0x33b60f(0x22c,\"ufNv\"),url:_0x33b60f(0x205,\"jV#G\"),params:{all:_0x19f624,ft:_0x47d1c5[_0x33b60f(0x211,\"Te(a\")],itemset:_0x33b60f(0x365,\"COgm\"),client:\"kt\",pn:_0x3c5f71-0x1,rn:pageSize,rformat:_0x47d1c5[_0x33b60f(0x30e,\"lyEW\")],encoding:_0x47d1c5[_0x33b60f(0x361,\"L#*p\")],pcjson:0x1,},}))[_0x33b60f(0x19d,\"Hnke\")],_0xda91f7=_0x10877f[_0x33b60f(0x15f,\"ahEa\")][_0x33b60f(0x14c,\"dO0Q\")](formatMusicSheet);return{isEnd:_0x47d1c5[_0x33b60f(0x1f9,\"ufNv\")](_0x47d1c5[_0x33b60f(0x26f,\"xpf7\")](+_0x10877f[\"PN\"],0x1),+_0x10877f[\"RN\"])>=+_0x10877f[_0x33b60f(0x268,\"*N1k\")],data:_0xda91f7,}}async function getArtistMusicWorks(_0x2614cd,_0x461efe){const _0x56afb3=_0x5e6c5c,_0x14a524={VyOwX:function(_0xc2a5c,_0x4dfd15){return _0xc2a5c(_0x4dfd15)},RZKeT:_0x56afb3(0x2e8,\"7I86\"),kNVBQ:_0x56afb3(0x30b,\"g7(K\"),VZReX:_0x56afb3(0x35e,\"Ihzl\"),ZFAYy:_0x56afb3(0x26b,\"Hnke\"),jraZB:function(_0x2de3b6,_0x332475){return _0x2de3b6>=_0x332475},UsSkk:function(_0x592140,_0x460617){return _0x592140*_0x460617},},_0x540ef8=(await(0x0,axios_1[_0x56afb3(0x24a,\"z6x)\")])({method:_0x14a524[_0x56afb3(0x15b,\"GWg&\")],url:_0x56afb3(0x13b,\"dO0Q\"),params:{pn:_0x461efe-0x1,rn:pageSize,artistid:_0x2614cd[\"id\"],stype:_0x56afb3(0x179,\"ProO\"),sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x56afb3(0x32d,\"@eI6\"),plat:\"pc\",thost:_0x14a524[_0x56afb3(0x34b,\"3b)s\")],vipver:_0x14a524[_0x56afb3(0x348,\"xpf7\")],devid:_0x14a524[_0x56afb3(0x253,\"cwO@\")],newver:0x1,pcjson:0x1,},}))[_0x56afb3(0x13f,\"GWg&\")],_0x5f2ea3=_0x540ef8[_0x56afb3(0x2a9,\"g7(K\")][_0x56afb3(0x2dc,\"Ihzl\")](musicListFilter)[_0x56afb3(0x119,\"ProO\")]((_0x48899c)=>{const _0x5b7d00=_0x56afb3;return{id:_0x48899c[_0x5b7d00(0x12a,\"$srB\")],artwork:_0x14a524[_0x5b7d00(0x28b,\"ahEa\")](artworkShort2Long,_0x48899c[_0x5b7d00(0x394,\"7I86\")]),title:he[_0x5b7d00(0x25f,\"R#rH\")](_0x48899c[_0x5b7d00(0x158,\"3Gme\")]||\"\"),artist:he[_0x5b7d00(0x2d0,\"3Bza\")](_0x48899c[_0x5b7d00(0x1dd,\"^gV4\")]||\"\"),album:he[_0x5b7d00(0xf2,\"R!KE\")](_0x48899c[_0x5b7d00(0x214,\"xDpZ\")]||\"\"),albumId:_0x48899c[_0x5b7d00(0x16d,\"3Gme\")],artistId:_0x48899c[_0x5b7d00(0x183,\"7I86\")],formats:_0x48899c[_0x5b7d00(0x2bf,\"d7lC\")],}});return{isEnd:_0x14a524[_0x56afb3(0x24b,\"GWg&\")](_0x14a524[_0x56afb3(0x2bd,\"dO0Q\")](+_0x540ef8[\"pn\"]+0x1,pageSize),+_0x540ef8[_0x56afb3(0x1fa,\"dO0Q\")]),data:_0x5f2ea3,}}async function getArtistAlbumWorks(_0x562031,_0x5e344f){const _0xba779d=_0x5e6c5c,_0x43b593={Yeiqc:_0xba779d(0x2c5,\"npV(\"),jHJsF:function(_0x130e5b,_0x36027e){return _0x130e5b-_0x36027e},TzfuU:_0xba779d(0x232,\"npV(\"),mrfSl:_0xba779d(0x28a,\"^gV4\"),dveaT:function(_0x2df9d1,_0x24031d){return _0x2df9d1>=_0x24031d},hXkCK:function(_0xdc4316,_0x61286c){return _0xdc4316*_0x61286c},rzSWi:function(_0x1cf8a7,_0x14c866){return _0x1cf8a7+_0x14c866},},_0x2a74ee=(await(0x0,axios_1[_0xba779d(0x336,\"cwO@\")])({method:_0x43b593[_0xba779d(0x302,\"$srB\")],url:_0xba779d(0x296,\"7@aK\"),params:{pn:_0x43b593[_0xba779d(0x163,\"3b)s\")](_0x5e344f,0x1),rn:pageSize,artistid:_0x562031[\"id\"],stype:_0x43b593[_0xba779d(0x218,\"cwO@\")],sortby:0x1,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0xba779d(0x32e,\"xDpZ\"),plat:\"pc\",thost:_0xba779d(0x1e1,\"8C&^\"),vipver:_0x43b593[_0xba779d(0x118,\"273M\")],devid:_0xba779d(0x2cd,\"bVbk\"),newver:0x1,pcjson:0x1,},}))[_0xba779d(0x2a4,\"Ihzl\")],_0x2524e9=_0x2a74ee[_0xba779d(0x38f,\"TzO2\")][_0xba779d(0x2ce,\"MJt[\")](musicListFilter)[_0xba779d(0x359,\"COgm\")](formatAlbumItem);return{isEnd:_0x43b593[_0xba779d(0x1d8,\"eVa]\")](_0x43b593[_0xba779d(0x161,\"3Gme\")](_0x43b593[_0xba779d(0x1ec,\"eVa]\")](+_0x2a74ee[\"pn\"],0x1),pageSize),+_0x2a74ee[_0xba779d(0x2c2,\"Hnke\")]),data:_0x2524e9,}}async function getArtistWorks(_0x3db340,_0x4ddab5,_0x55d939){const _0x33bcaa=_0x5e6c5c,_0x5b5160={BCPXE:function(_0x11dec5,_0x3827f7){return _0x11dec5===_0x3827f7},nZCvp:_0x33bcaa(0x384,\"cwO@\"),iBedS:function(_0x5530ca,_0x55f64e,_0x5f308b){return _0x5530ca(_0x55f64e,_0x5f308b)},};if(_0x5b5160[_0x33bcaa(0xea,\"Te(a\")](_0x55d939,_0x33bcaa(0x382,\"3Gme\")))return getArtistMusicWorks(_0x3db340,_0x4ddab5);else{if(_0x5b5160[_0x33bcaa(0x353,\"8C&^\")](_0x55d939,_0x5b5160[_0x33bcaa(0x1fe,\"7@aK\")]))return _0x5b5160[_0x33bcaa(0x170,\"&1Ej\")](getArtistAlbumWorks,_0x3db340,_0x4ddab5)}}async function getLyric(_0xf2b06c){const _0x5e4071=_0x5e6c5c,_0x37394b={BlIaa:_0x5e4071(0x395,\"3b)s\")},_0x4055e6=(await axios_1[_0x5e4071(0x279,\"ahEa\")][_0x5e4071(0x114,\"dO0Q\")](_0x37394b[_0x5e4071(0x26d,\"d7lC\")],{params:{musicId:_0xf2b06c[\"id\"],httpStatus:0x1}}))[_0x5e4071(0x101,\"R#rH\")],_0x18a4e7=_0x4055e6[_0x5e4071(0x182,\"In5l\")][_0x5e4071(0x2a6,\"hB9b\")];return{rawLrc:_0x18a4e7[_0x5e4071(0x273,\"QAOS\")]((_0x5c80e7)=>\"[\"+_0x5c80e7[_0x5e4071(0x209,\"hB9b\")]+\"]\"+_0x5c80e7[_0x5e4071(0x1df,\"Te(a\")])[_0x5e4071(0x323,\"TzO2\")](\"\\x0a\"),}}async function getAlbumInfo(_0x1614ae){const _0x5c52f3=_0x5e6c5c,_0x3dbf08={CkvbO:function(_0x44d3ac,_0x59b7fc){return _0x44d3ac===_0x59b7fc},ebfqH:_0x5c52f3(0x381,\"ufNv\"),fBJOI:_0x5c52f3(0x1ab,\"kMX9\"),oXiLS:_0x5c52f3(0x254,\"xpf7\"),uqJEi:_0x5c52f3(0x23e,\"ufNv\"),pztpB:_0x5c52f3(0x345,\"cwO@\"),fDDMZ:_0x5c52f3(0x120,\"Kv(q\"),},_0x50ddf9=(await(0x0,axios_1[_0x5c52f3(0x32f,\"GWg&\")])({method:_0x5c52f3(0x2c4,\"K7!#\"),url:_0x5c52f3(0x21d,\"R198\"),params:{pn:0x0,rn:0x64,albumid:_0x1614ae[\"id\"],stype:_0x3dbf08[_0x5c52f3(0x33d,\"Ihzl\")],sortby:0x0,alflac:0x1,show_copyright_off:0x1,pcmp4:0x1,encoding:_0x3dbf08[_0x5c52f3(0x285,\"R198\")],plat:\"pc\",thost:_0x3dbf08[_0x5c52f3(0x11d,\"3Bza\")],vipver:_0x3dbf08[_0x5c52f3(0x20e,\"L#*p\")],devid:_0x3dbf08[_0x5c52f3(0x20a,\"bVbk\")],newver:0x1,pcjson:0x1,},}))[_0x5c52f3(0x263,\"Kv(q\")],_0x160aa8=_0x50ddf9[_0x5c52f3(0x187,\"3Bza\")][_0x5c52f3(0x227,\"eVa]\")](musicListFilter)[_0x5c52f3(0x1bd,\"L#*p\")]((_0x370586)=>{const _0x37ff09=_0x5c52f3;return _0x3dbf08[_0x37ff09(0x39d,\"Te(a\")](_0x37ff09(0x1ba,\"ProO\"),_0x3dbf08[_0x37ff09(0x2e9,\"Kv(q\")])?{id:_0x370586[\"id\"],artwork:_0x1614ae[_0x37ff09(0x172,\"jV#G\")]??_0x50ddf9[_0x37ff09(0x390,\"xDpZ\")],title:he[_0x37ff09(0x367,\"K7!#\")](_0x370586[_0x37ff09(0x284,\"ProO\")]||\"\"),artist:he[_0x37ff09(0xf2,\"R!KE\")](_0x370586[_0x37ff09(0x21c,\"7I86\")]||\"\"),album:he[_0x37ff09(0x2d0,\"3Bza\")](_0x370586[_0x37ff09(0x31a,\"3Bza\")]||\"\"),albumId:_0x1614ae[\"id\"],artistId:_0x370586[_0x37ff09(0x1fc,\"cwO@\")],formats:_0x370586[_0x37ff09(0x22e,\"kMX9\")],}:{url:_0x37ff09(0x34d,\"xDpZ\")+_0x22d23e[_0x37ff09(0x2a4,\"Ihzl\")][_0x37ff09(0x162,\"npV(\")],}});return{musicList:_0x160aa8}}async function getTopLists(){const _0x273d2b=_0x5e6c5c,_0x31a7e8={oWiRS:_0x273d2b(0x265,\"&1Ej\")},_0xd969df=(await axios_1[_0x273d2b(0x2cc,\"&1Ej\")][_0x273d2b(0x2e0,\"3b)s\")](_0x31a7e8[_0x273d2b(0x2b3,\"^gV4\")]))[_0x273d2b(0x270,\"7I86\")][_0x273d2b(0x2f4,\"#B0Q\")];return _0xd969df[_0x273d2b(0xec,\"ahEa\")]((_0x30cccf)=>({title:_0x30cccf[_0x273d2b(0x1b3,\"xpf7\")],data:_0x30cccf[_0x273d2b(0x399,\"&1Ej\")][_0x273d2b(0x392,\"Te(a\")]((_0x4df94e)=>({id:_0x4df94e[_0x273d2b(0x2b8,\"pRs!\")],coverImg:_0x4df94e[_0x273d2b(0x19c,\"pRs!\")]??_0x4df94e[_0x273d2b(0x2d4,\"R#rH\")]??_0x4df94e[_0x273d2b(0x283,\"^gV4\")],title:_0x4df94e[_0x273d2b(0x307,\"8C&^\")],description:_0x4df94e[_0x273d2b(0x14e,\"bVbk\")],})),}))}async function getTopListDetail(_0x417890){const _0x2e26dc=_0x5e6c5c,_0x3db633={ZwIPO:_0x2e26dc(0x358,\"dO0Q\"),vZDUZ:_0x2e26dc(0x17b,\"jV#G\"),},_0x58c390=await axios_1[_0x2e26dc(0x177,\"vlC&\")][_0x2e26dc(0x188,\"vlC&\")](_0x2e26dc(0x1b7,\"kMX9\"),{params:{from:\"pc\",fmt:_0x3db633[_0x2e26dc(0x1d7,\"kMX9\")],pn:0x0,rn:0x50,type:_0x2e26dc(0x115,\"7I86\"),data:_0x3db633[_0x2e26dc(0x25c,\"273M\")],id:_0x417890[\"id\"],show_copyright_off:0x0,pcmp4:0x1,isbang:0x1,userid:0x0,httpStatus:0x1,},});return{..._0x417890,musicList:_0x58c390[_0x2e26dc(0x305,\"*N1k\")][_0x2e26dc(0x39c,\"@eI6\")][_0x2e26dc(0x388,\"G%K(\")]((_0x662fa4)=>{const _0x587c16=_0x2e26dc;return{id:_0x662fa4[\"id\"],title:he[_0x587c16(0x203,\"g7(K\")](_0x662fa4[_0x587c16(0x39b,\"In5l\")]||\"\"),artist:he[_0x587c16(0x2c9,\"z6x)\")](_0x662fa4[_0x587c16(0x143,\"Te(a\")]||\"\"),album:he[_0x587c16(0x18e,\"&1Ej\")](_0x662fa4[_0x587c16(0x244,\"Te(a\")]||\"\"),albumId:_0x662fa4[_0x587c16(0x2b5,\"K7!#\")],artistId:_0x662fa4[_0x587c16(0x333,\"R#rH\")],formats:_0x662fa4[_0x587c16(0x16b,\"8C&^\")],}}),}}async function getMusicSheetResponseById(_0x5e8722,_0x2d9077,_0x4ed548=0x32){const _0x46e774=_0x5e6c5c,_0x10de52={edgWd:function(_0x13cc87,_0x236183){return _0x13cc87-_0x236183},SlTqR:_0x46e774(0x12d,\"$srB\"),aUhFx:_0x46e774(0x383,\"pRs!\"),};return(await axios_1[_0x46e774(0x39e,\"oHF4\")][_0x46e774(0x2b7,\"MJt[\")](_0x46e774(0x347,\"K7!#\"),{params:{op:_0x46e774(0xf0,\"kMX9\"),pid:_0x5e8722,pn:_0x10de52[_0x46e774(0x123,\"g7(K\")](_0x2d9077,0x1),rn:_0x4ed548,encode:_0x10de52[_0x46e774(0x1dc,\"d7lC\")],keyset:_0x10de52[_0x46e774(0x14f,\"ahEa\")],vipver:_0x46e774(0x341,\"@eI6\"),newver:0x1,},}))[_0x46e774(0x301,\"z6x)\")]}async function importMusicSheet(_0x3dc4d4){const _0x568dcd=_0x5e6c5c,_0x4bbdfe={poxtZ:function(_0x3f0bb9,_0x30921f){return _0x3f0bb9===_0x30921f},RdbHQ:_0x568dcd(0x12b,\"TzO2\"),TIppW:function(_0x59cb32){return _0x59cb32()},UCfer:_0x568dcd(0x116,\"7I86\"),xmdwi:function(_0x25b2fb,_0x433bfb,_0x3d443f){return _0x25b2fb(_0x433bfb,_0x3d443f)},vOnUb:function(_0x18df96,_0x3519db){return _0x18df96===_0x3519db},MRygS:_0x568dcd(0x17c,\"Hnke\"),LNMYR:function(_0x4e5038,_0x287244){return _0x4e5038+_0x287244},bYbGE:function(_0x1355c9,_0x2db391){return _0x1355c9*_0x2db391},jiQIU:_0x568dcd(0x1cc,\"L#*p\"),Hvncc:_0x568dcd(0x33b,\"7@aK\"),BYaBL:function(_0x2ba9ce,_0x597ebf){return _0x2ba9ce<_0x597ebf},UOneo:_0x568dcd(0xe6,\"*N1k\"),KEZZo:function(_0x1a1729,_0x3e89a7,_0x446132,_0x3c1d75){return _0x1a1729(_0x3e89a7,_0x446132,_0x3c1d75)},RdnRv:function(_0x2348bf,_0x147c7a){return _0x2348bf/_0x147c7a},sjPEN:function(_0x56cd65,_0x17fef1){return _0x56cd65(_0x17fef1)},};let _0x5ca849;if(!_0x5ca849){if(_0x4bbdfe[_0x568dcd(0x202,\"7@aK\")]===_0x4bbdfe[_0x568dcd(0x21b,\"eVa]\")])return{url:_0x52b404[_0x568dcd(0x263,\"Kv(q\")][_0x568dcd(0x208,\"xDpZ\")],};else _0x5ca849=_0x3dc4d4[_0x568dcd(0x1ac,\"@eI6\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]}!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x2c3,\"lyEW\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]);!_0x5ca849&&(_0x5ca849=_0x3dc4d4[_0x568dcd(0x3a0,\"K7!#\")](/^\\s*(\\d+)\\s*$/));if(!_0x5ca849)return;let _0x3ed220=0x1,_0x5a1e26=0x1e,_0x27fa2a=[];while(_0x4bbdfe[_0x568dcd(0x291,\"3Bza\")](_0x3ed220,_0x5a1e26)){if(_0x4bbdfe[_0x568dcd(0x220,\"G%K(\")]===_0x568dcd(0x128,\"d7lC\")){try{const _0x3c15d9=await _0x4bbdfe[_0x568dcd(0x2c7,\"#B0Q\")](getMusicSheetResponseById,_0x5ca849,_0x3ed220,0x50);(_0x5a1e26=Math[_0x568dcd(0x108,\"3Gme\")](_0x4bbdfe[_0x568dcd(0x1d4,\"cwO@\")](_0x3c15d9[_0x568dcd(0x2d2,\"pRs!\")],0x50))),_0x4bbdfe[_0x568dcd(0x165,\"3b)s\")](isNaN,_0x5a1e26)&&(_0x5a1e26=0x1),(_0x27fa2a=_0x27fa2a[_0x568dcd(0x256,\"g7(K\")](_0x3c15d9[_0x568dcd(0x107,\"ufNv\")][_0x568dcd(0x332,\"8mCI\")](musicListFilter)[_0x568dcd(0x2fe,\"MJt[\")]((_0x5677a2)=>({id:_0x5677a2[\"id\"],title:he[_0x568dcd(0x369,\"$srB\")](_0x5677a2[_0x568dcd(0x398,\"bVbk\")]||\"\"),artist:he[_0x568dcd(0x271,\"8mCI\")](_0x5677a2[_0x568dcd(0x328,\"xpf7\")]||\"\"),album:he[_0x568dcd(0x24d,\"ahEa\")](_0x5677a2[_0x568dcd(0x350,\"dO0Q\")]||\"\"),albumId:_0x5677a2[_0x568dcd(0x1c6,\"g7(K\")],artistId:_0x5677a2[_0x568dcd(0x389,\"#B0Q\")],formats:_0x5677a2[_0x568dcd(0x373,\"8mCI\")],}))))}catch{}await new Promise((_0x536f32)=>{const _0x4eb7b5=_0x568dcd,_0x5bc280={FkCji:function(_0x338086,_0x20e0ae){return _0x338086===_0x20e0ae},iWZaU:_0x4bbdfe[_0x4eb7b5(0x12f,\"$srB\")],XSeuV:function(_0x356fa0,_0x541143,_0xded2f5){const _0x50c2a8=_0x4eb7b5;return _0x4bbdfe[_0x50c2a8(0x366,\"&1Ej\")](_0x356fa0,_0x541143,_0xded2f5)},nOqDH:function(_0x3ebaa8,_0x128429){const _0x11dc0e=_0x4eb7b5;return _0x4bbdfe[_0x11dc0e(0x375,\"273M\")](_0x3ebaa8,_0x128429)},igwKy:_0x4bbdfe[_0x4eb7b5(0xfa,\"Kv(q\")],};setTimeout(()=>{const _0x33c808=_0x4eb7b5;if(_0x4bbdfe[_0x33c808(0x38b,\"$srB\")](_0x4bbdfe[_0x33c808(0x1b8,\"xpf7\")],_0x33c808(0x168,\"ahEa\"))){if(_0x5bc280[_0x33c808(0x206,\"R!KE\")](_0x5e8990,_0x5bc280[_0x33c808(0x360,\"$srB\")]))return _0x5bc280[_0x33c808(0x2e6,\"d7lC\")](_0x300543,_0xfe3676,_0x13f0e9);else{if(_0x5bc280[_0x33c808(0x217,\"d7lC\")](_0x4113ec,_0x5bc280[_0x33c808(0x21f,\"7I86\")]))return _0x4016b4(_0x44b288,_0x18d17e)}}else _0x4bbdfe[_0x33c808(0x2a0,\"3Bza\")](_0x536f32)},_0x4bbdfe[_0x4eb7b5(0x2e5,\"TzO2\")](0xc8,_0x4bbdfe[_0x4eb7b5(0x14b,\"vlC&\")](Math[_0x4eb7b5(0x20f,\"8C&^\")](),0x64)))}),++_0x3ed220}else _0x41b000=0x1}return _0x27fa2a}async function getRecommendSheetTags(){const _0x2b831d=_0x5e6c5c,_0x400ac0={XjQlV:_0x2b831d(0x24c,\"Ihzl\"),oqWFZ:_0x2b831d(0x23d,\"ahEa\"),NDTmC:_0x2b831d(0x15a,\"L#*p\"),},_0x4c1fc1=(await axios_1[_0x2b831d(0x295,\"R198\")][_0x2b831d(0x16c,\"R198\")](_0x2b831d(0x3a1,\"8mCI\")))[_0x2b831d(0x175,\"ProO\")][_0x2b831d(0x387,\"pRs!\")],_0x42de30=_0x4c1fc1[_0x2b831d(0xec,\"ahEa\")]((_0x2c35ad)=>({title:_0x2c35ad[_0x2b831d(0x22a,\"@eI6\")],data:_0x2c35ad[_0x2b831d(0x2a4,\"Ihzl\")][_0x2b831d(0x1e0,\"^gV4\")]((_0x14a235)=>({id:_0x14a235[\"id\"],digest:_0x14a235[_0x2b831d(0x1ff,\"K7!#\")],title:_0x14a235[_0x2b831d(0x2f5,\"g7(K\")],})),}))[_0x2b831d(0xfc,\"d7lC\")]((_0xe17ab7)=>_0xe17ab7[_0x2b831d(0x166,\"&1Ej\")][_0x2b831d(0x155,\"vlC&\")]),_0xf0b488=[{id:_0x400ac0[_0x2b831d(0x229,\"273M\")],title:\"\u7ffb\u5531\",digest:_0x2b831d(0xf6,\"oHF4\"),},{id:_0x2b831d(0x112,\"3Gme\"),title:\"\u7f51\u7edc\",digest:_0x400ac0[_0x2b831d(0x150,\"d7lC\")],},{title:\"\u4f24\u611f\",digest:_0x400ac0[_0x2b831d(0x2df,\"xpf7\")],id:_0x400ac0[_0x2b831d(0x235,\"npV(\")],},{title:\"\u6b27\u7f8e\",digest:_0x400ac0[_0x2b831d(0x200,\"273M\")],id:\"35\"},];return{data:_0x42de30,pinned:_0xf0b488}}async function getRecommendSheetsByTag(_0x23b7d6,_0x375e6f){const _0x3ed17e=_0x5e6c5c,_0x54822c={vNZQG:_0x3ed17e(0x2bb,\"cwO@\"),YTENz:function(_0x3ced22,_0x1fc1e4){return _0x3ced22(_0x1fc1e4)},UKnKM:_0x3ed17e(0x23b,\"MJt[\"),WDraq:function(_0x18af43,_0x209da4){return _0x18af43!==_0x209da4},wrKry:_0x3ed17e(0xee,\"cwO@\"),qJoHu:function(_0x16e8c7,_0x21e5c6){return _0x16e8c7===_0x21e5c6},IaGMA:_0x3ed17e(0x1a1,\"d7lC\"),qyGmY:_0x3ed17e(0x129,\"npV(\"),BTXmJ:function(_0x4afe3e,_0x356ef9){return _0x4afe3e-_0x356ef9},pNrwf:function(_0x31ee8a,_0x50b377){return _0x31ee8a>=_0x50b377},},_0x432bd2=0x14;let _0xf740d9;if(_0x23b7d6[\"id\"]){if(_0x3ed17e(0x1fd,\"xpf7\")===_0x54822c[_0x3ed17e(0x117,\"8mCI\")]){if(_0x54822c[_0x3ed17e(0x1f3,\"Ihzl\")](_0x23b7d6[_0x3ed17e(0x174,\"cwO@\")],_0x54822c[_0x3ed17e(0x173,\"^gV4\")]))_0x54822c[_0x3ed17e(0x134,\"K7!#\")](_0x54822c[_0x3ed17e(0x2f7,\"TzO2\")],_0x3ed17e(0xfb,\"L#*p\"))?(_0xf740d9=(await axios_1[_0x3ed17e(0x210,\"Ihzl\")][_0x3ed17e(0x114,\"dO0Q\")](_0x3ed17e(0x292,\"z6x)\")+_0x54822c[_0x3ed17e(0x33f,\"#B0Q\")](_0x375e6f,0x1)+_0x3ed17e(0x349,\"QAOS\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x2e2,\"g7(K\")+_0x432bd2))[_0x3ed17e(0x2f2,\"TzO2\")][_0x3ed17e(0x263,\"Kv(q\")]):(_0x33f67b=_0x287b9f[_0x3ed17e(0x102,\"npV(\")](/https?:\\/\\/www\\/kuwo\\.cn\\/playlist_detail\\/(\\d+)/)?.[0x1]);else{let _0x588f56=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x374,\"kMX9\")](_0x3ed17e(0x136,\"COgm\")+_0x23b7d6[\"id\"]+_0x3ed17e(0x1e6,\"g7(K\")))[_0x3ed17e(0x281,\"R198\")];_0xf740d9={total:0x0,data:_0x588f56[_0x3ed17e(0x297,\"dO0Q\")]((_0x4b12a6,_0x494b65)=>[..._0x4b12a6,..._0x494b65[_0x3ed17e(0x223,\"jV#G\")],]),}}}else return{id:_0x638cda[_0x3ed17e(0x240,\"&1Ej\")][_0x3ed17e(0x1d6,\"kMX9\")](_0x54822c[_0x3ed17e(0x1f1,\"@eI6\")],\"\"),artwork:_0x54822c[_0x3ed17e(0x2f9,\"In5l\")](_0x25c9b0,_0x3ede3b[_0x3ed17e(0x38e,\"8C&^\")]),title:_0x55d5e4[_0x3ed17e(0x18e,\"&1Ej\")](_0x2b0ac9[_0x3ed17e(0x149,\"$srB\")]||\"\"),artist:_0x2e894f[_0x3ed17e(0x1f2,\"*N1k\")](_0x39bf51[_0x3ed17e(0x318,\"QAOS\")]||\"\"),album:_0x465ac7[_0x3ed17e(0x27d,\"npV(\")](_0x1389b0[_0x3ed17e(0x11f,\"Hnke\")]||\"\"),albumId:_0x1964e5[_0x3ed17e(0x1a4,\"R198\")],artistId:_0x47ef85[_0x3ed17e(0x276,\"L#*p\")],formats:_0x54822c[_0x3ed17e(0x17e,\"&1Ej\")],isfree:_0x54822c[_0x3ed17e(0x1e2,\"GWg&\")](_0x5b689d?.[_0x3ed17e(0x313,\"kMX9\")]?.[_0x3ed17e(0x311,\"kMX9\")],\"1\"),}}else _0xf740d9=(await axios_1[_0x3ed17e(0x2b0,\"COgm\")][_0x3ed17e(0x2e1,\"7@aK\")](_0x3ed17e(0x26e,\"npV(\")+(_0x375e6f-0x1)+_0x3ed17e(0x35b,\"^gV4\")+_0x432bd2+_0x3ed17e(0x245,\"R!KE\")))[_0x3ed17e(0x175,\"ProO\")][_0x3ed17e(0x166,\"&1Ej\")];const _0x2e2d1d=_0x54822c[_0x3ed17e(0x10d,\"K7!#\")](_0x375e6f*_0x432bd2,_0xf740d9[_0x3ed17e(0xf4,\"8mCI\")]);return{isEnd:_0x2e2d1d,data:_0xf740d9[_0x3ed17e(0x2db,\"oHF4\")][_0x3ed17e(0x2b9,\"&1Ej\")]((_0x379ad6)=>({title:_0x379ad6[_0x3ed17e(0x1c5,\"lyEW\")],artist:_0x379ad6[_0x3ed17e(0x1a2,\"d7lC\")],id:_0x379ad6[\"id\"],artwork:_0x379ad6[_0x3ed17e(0x22f,\"g7(K\")],playCount:_0x379ad6[_0x3ed17e(0x274,\"g7(K\")],createUserId:_0x379ad6[_0x3ed17e(0x261,\"R198\")],})),}}async function getMusicSheetInfo(_0x387e28,_0x56b16f){const _0x945004=_0x5e6c5c,_0x2475bb={fWscS:function(_0x129342,_0x3c69c6,_0x15684b,_0x530759){return _0x129342(_0x3c69c6,_0x15684b,_0x530759)},VOdrq:function(_0x488dd3,_0x1cbaf5){return _0x488dd3>=_0x1cbaf5},POplW:function(_0x5007ab,_0x575334){return _0x5007ab*_0x575334},},_0x5ef7bc=await _0x2475bb[_0x945004(0x32c,\"R198\")](getMusicSheetResponseById,_0x387e28[\"id\"],_0x56b16f,pageSize);return{isEnd:_0x2475bb[_0x945004(0x1bf,\"^gV4\")](_0x2475bb[_0x945004(0x319,\"$srB\")](_0x56b16f,pageSize),_0x5ef7bc[_0x945004(0x29f,\"cwO@\")]),musicList:_0x5ef7bc[_0x945004(0x272,\"Hnke\")][_0x945004(0x1e9,\"273M\")](musicListFilter)[_0x945004(0xec,\"ahEa\")]((_0x59c1a5)=>({id:_0x59c1a5[\"id\"],title:he[_0x945004(0x153,\"MJt[\")](_0x59c1a5[_0x945004(0x24f,\"dO0Q\")]||\"\"),artist:he[_0x945004(0x376,\"vlC&\")](_0x59c1a5[_0x945004(0x143,\"Te(a\")]||\"\"),album:he[_0x945004(0x267,\"pRs!\")](_0x59c1a5[_0x945004(0x36e,\"R#rH\")]||\"\"),albumId:_0x59c1a5[_0x945004(0x29b,\"Te(a\")],artistId:_0x59c1a5[_0x945004(0x183,\"7I86\")],formats:_0x59c1a5[_0x945004(0x339,\"3b)s\")],})),}}async function getMusicKuWo(_0x3ccdce){const _0x21aec4=_0x5e6c5c,_0x2b79ab=(await axios_1[_0x21aec4(0x1c8,\"eVa]\")][_0x21aec4(0x335,\"In5l\")](_0x21aec4(0x326,\"K7!#\")+_0x3ccdce[\"id\"]+_0x21aec4(0x156,\"#B0Q\")))[_0x21aec4(0x181,\"xDpZ\")];return{url:_0x2b79ab[_0x21aec4(0x142,\"pRs!\")]}}async function getMusicZZ123(_0x2c7c09){const _0x2db3e0=_0x5e6c5c,_0x27cf10={femGl:function(_0xdce131,_0x815bd2){return _0xdce131+_0x815bd2},jcOtM:_0x2db3e0(0x34c,\"L#*p\"),ablvM:_0x2db3e0(0x178,\"In5l\"),cGNAZ:function(_0x3a20ab,_0x2dc9e9){return _0x3a20ab===_0x2dc9e9},HLttB:_0x2db3e0(0x362,\"7@aK\"),SnfNk:function(_0xc357aa,_0x16620d){return _0xc357aa>_0x16620d},BNsFg:function(_0xdd0f5a,_0xd712eb){return _0xdd0f5a===_0xd712eb},ZBTFd:_0x2db3e0(0x11b,\"K7!#\"),buQQR:_0x2db3e0(0x1d1,\"3Gme\"),};try{let _0x5d2e67=_0x27cf10[_0x2db3e0(0x27e,\"xDpZ\")](_0x2c7c09[_0x2db3e0(0x23a,\"ProO\")],_0x2db3e0(0x27c,\"Hnke\"))+_0x2c7c09[_0x2db3e0(0x190,\"8C&^\")];const _0x38969f=(await(0x0,axios_1[_0x2db3e0(0x216,\"R#rH\")])({method:_0x27cf10[_0x2db3e0(0x1f6,\"z6x)\")],url:_0x2db3e0(0x1ca,\"Kv(q\"),headers:ZZ123Config[_0x2db3e0(0x197,\"Kv(q\")],params:{act:_0x27cf10[_0x2db3e0(0x31f,\"ProO\")],key:_0x5d2e67,page:0x1,},}))[_0x2db3e0(0x243,\"eVa]\")];if(_0x38969f[_0x2db3e0(0x13f,\"GWg&\")][_0x2db3e0(0x1ea,\"3Gme\")]>0x0){if(_0x27cf10[_0x2db3e0(0x31e,\"dO0Q\")](_0x27cf10[_0x2db3e0(0x251,\"R!KE\")],_0x27cf10[_0x2db3e0(0x1d9,\"K7!#\")])){let _0x1232b2=_0x38969f[_0x2db3e0(0x154,\"bVbk\")][_0x2db3e0(0x35d,\"$srB\")]((_0x3cf330)=>_0x3cf330[_0x2db3e0(0x144,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1dd,\"^gV4\")]&&_0x3cf330[_0x2db3e0(0xef,\"QAOS\")]==_0x2c7c09[_0x2db3e0(0x1a3,\"Te(a\")]);if(_0x27cf10[_0x2db3e0(0x1ee,\"&1Ej\")](_0x1232b2[_0x2db3e0(0x23f,\"jV#G\")],0x0)){if(_0x27cf10[_0x2db3e0(0x310,\"3Gme\")](_0x27cf10[_0x2db3e0(0x2d8,\"K7!#\")],_0x27cf10[_0x2db3e0(0x1f8,\"MJt[\")])){const _0x4077ac=(await(0x0,axios_1[_0x2db3e0(0x2a3,\"R!KE\")])({method:_0x27cf10[_0x2db3e0(0x239,\"In5l\")],url:_0x2db3e0(0x12e,\"vlC&\"),headers:ZZ123Config[_0x2db3e0(0x30a,\"L#*p\")],params:{act:_0x27cf10[_0x2db3e0(0x356,\"npV(\")],id:_0x1232b2[0x0][\"id\"],},}))[_0x2db3e0(0x243,\"eVa]\")];return(_0x4077ac[_0x2db3e0(0x132,\"G%K(\")]=0xc8)?{url:_0x2db3e0(0x127,\"R#rH\")+_0x4077ac[_0x2db3e0(0x16e,\"g7(K\")][_0x2db3e0(0x337,\"R#rH\")],}:{url:\"\"}}else return}}else _0x37168c=_0x25b73b[_0x2db3e0(0x1ac,\"@eI6\")](/https?:\\/\\/m\\.kuwo\\.cn\\/h5app\\/playlist\\/(\\d+)/)?.[0x1]}return{url:\"\"}}catch(_0x1b5430){return{url:\"\"}}}function traceLog(_0x147b58,_0x23593e){const _0x3e3257=_0x5e6c5c;console[_0x3e3257(0x306,\"eVa]\")](_0x147b58,_0x23593e)}async function getMusicFangpi(_0x1fcb4b){const _0x3e1265=_0x5e6c5c,_0x2842f9={dXSMe:function(_0x2b571b,_0x210731){return _0x2b571b(_0x210731)},BEfpR:function(_0x480a67,_0x238463){return _0x480a67+_0x238463},Qrdrb:function(_0x29638d,_0x45c976){return _0x29638d===_0x45c976},ttSgn:_0x3e1265(0x28d,\"jV#G\"),HgDsT:function(_0x2e173d,_0x17c6ad){return _0x2e173d+_0x17c6ad},nKsCS:_0x3e1265(0x23c,\"npV(\"),UtFGr:function(_0x9d8120,_0x1144a1){return _0x9d8120==_0x1144a1},vjdoS:function(_0x12f08e,_0x4e48ca){return _0x12f08e!=_0x4e48ca},};try{let _0xbf5898=_0x1fcb4b[_0x3e1265(0x215,\"COgm\")],_0x590476=_0x1fcb4b[_0x3e1265(0x15e,\"&1Ej\")],_0x5e435b=_0x2842f9[_0x3e1265(0x1d5,\"GWg&\")](encodeURIComponent,_0x2842f9[_0x3e1265(0x105,\"Hnke\")](_0x2842f9[_0x3e1265(0x238,\"hB9b\")](_0xbf5898,\"\\x20\"),_0x590476)),_0x3bf1d4=_0x3e1265(0x25b,\"GWg&\")+_0x5e435b;const _0x4cd940=(await(0x0,axios_1[_0x3e1265(0x2cc,\"&1Ej\")])({url:_0x3bf1d4,method:_0x3e1265(0x34e,\"Ihzl\"),timeout:0xbb8,}))[_0x3e1265(0xed,\"G%K(\")];var _0x74ebef=/class=\"col-5 col-content\">(.*?)<\\/a>/gis;let _0x4e8c90=_0x4cd940[_0x3e1265(0x27f,\"8mCI\")](_0x74ebef);for(const _0xf66e14 of _0x4e8c90){if(_0x2842f9[_0x3e1265(0x1de,\"pRs!\")](_0x2842f9[_0x3e1265(0x29d,\"Te(a\")],_0x3e1265(0x352,\"ProO\"))){let _0x34ac33=_0x2842f9[_0x3e1265(0x17d,\"jV#G\")](_0xf66e14[_0x3e1265(0x393,\"vlC&\")](_0x2842f9[_0x3e1265(0x344,\"jV#G\")]),0x7),_0x575184=_0xf66e14[_0x3e1265(0x141,\"lyEW\")](_0x34ac33);_0x34ac33=_0x575184[_0x3e1265(0x255,\"R198\")](\"\\x22\");let _0x44be0c=_0x575184[_0x3e1265(0x147,\"8C&^\")](0x0,_0x34ac33),_0x24c97a=(await(0x0,axios_1[_0x3e1265(0x279,\"ahEa\")])({method:_0x3e1265(0x315,\"Kv(q\"),url:_0x3e1265(0x15d,\"Te(a\")+_0x44be0c+_0x3e1265(0x191,\"dO0Q\"),timeout:0x1388,}))[_0x3e1265(0x2da,\"$srB\")];if(_0x2842f9[_0x3e1265(0x28e,\"d7lC\")](_0x24c97a[_0x3e1265(0x36a,\"K7!#\")],0x1)&&_0x24c97a[_0x3e1265(0x2eb,\"3Gme\")][_0x3e1265(0x2a5,\"Kv(q\")]&&_0x2842f9[_0x3e1265(0x397,\"npV(\")](_0x24c97a[_0x3e1265(0x2da,\"$srB\")][_0x3e1265(0x142,\"pRs!\")],\"\"))return{url:_0x24c97a[_0x3e1265(0x2ad,\"d7lC\")][_0x3e1265(0x275,\"z6x)\")],}}else return{url:_0x30a600}}return{url:\"\"}}catch(_0x27f8df){return{url:\"\"}}}async function getMusicHifini(_0x2acea6){const _0x1158b2=_0x5e6c5c,_0x592036={IqsPz:function(_0x2ad948,_0x3db313){return _0x2ad948(_0x3db313)},DGetp:function(_0x573c53,_0x4cd09b){return _0x573c53+_0x4cd09b},CSdvw:_0x1158b2(0x31b,\"Kv(q\"),kVrlr:function(_0x333508,_0x477c3a){return _0x333508+_0x477c3a},mdJin:_0x1158b2(0x31c,\"3Gme\"),tIQHs:_0x1158b2(0x368,\"8mCI\"),rCtaa:function(_0x25c9e2,_0x53a6df,_0x359d39){return _0x25c9e2(_0x53a6df,_0x359d39)},qEhWf:_0x1158b2(0x151,\"pRs!\"),uIcRf:_0x1158b2(0x380,\"Kv(q\"),pKrkh:function(_0x36834f,_0x44cf87){return _0x36834f==_0x44cf87},fGCFC:function(_0x3b3668,_0x2c0238){return _0x3b3668!==_0x2c0238},BYJYI:_0x1158b2(0x2c1,\"3Gme\"),GJZpw:function(_0x2f51fc,_0x5f50f0){return _0x2f51fc>_0x5f50f0},KGNjc:function(_0x1ca84d,_0x4f644a){return _0x1ca84d!=_0x4f644a},Fbiju:_0x1158b2(0x221,\"dO0Q\"),dikxU:_0x1158b2(0x2ea,\"MJt[\"),ovEsl:function(_0x15c4b3,_0x4ece2f,_0x113749){return _0x15c4b3(_0x4ece2f,_0x113749)},jaHIk:_0x1158b2(0x2cf,\"bVbk\"),};try{let _0x133263=_0x2acea6[_0x1158b2(0xe5,\"273M\")],_0x5feb03=_0x2acea6[_0x1158b2(0x1db,\"g7(K\")],_0x57ab75=_0x592036[_0x1158b2(0x312,\"jV#G\")](encodeURIComponent,_0x592036[_0x1158b2(0x357,\"xDpZ\")](_0x133263,\"\\x20\")+_0x5feb03);(_0x57ab75=_0x57ab75[_0x1158b2(0x180,\"$srB\")](\"-\",_0x592036[_0x1158b2(0x1c0,\"7@aK\")])),(_0x57ab75=_0x57ab75[_0x1158b2(0x10e,\"dO0Q\")](\"%\",\"_\"));let _0x5c0843=_0x592036[_0x1158b2(0x1d2,\"8mCI\")](_0x1158b2(0x230,\"jV#G\"),_0x57ab75)+_0x592036[_0x1158b2(0x37c,\"273M\")];_0x5c0843=_0x5c0843[_0x1158b2(0x37e,\"L#*p\")](\"%\",\"_\");let _0x1026e0=(await(0x0,axios_1[_0x1158b2(0x237,\"kMX9\")])({method:_0x592036[_0x1158b2(0x152,\"^gV4\")],url:_0x5c0843,timeout:0x1388,}))[_0x1158b2(0xff,\"vlC&\")];var _0x116475=/class=\"media-body\">(.*?)<\\/div>/gis;let _0x4cff44=_0x1026e0[_0x1158b2(0x14a,\"z6x)\")](_0x116475),_0x199d5a;_0x592036[_0x1158b2(0x247,\"pRs!\")](traceLog,_0x1158b2(0x300,\"&1Ej\"),_0x4cff44);for(const _0x5bd9e1 of _0x4cff44){let _0x330fcc=_0x5bd9e1[_0x1158b2(0x346,\"R198\")](/href=\"thread(.*?)\">(.*?)<\\/a>/),_0x51ec2f=_0x330fcc[0x0][_0x1158b2(0x324,\"COgm\")](_0x592036[_0x1158b2(0x20c,\"MJt[\")],\"\")[_0x1158b2(0x2d6,\"xpf7\")](_0x1158b2(0x1a7,\"dO0Q\"),\"\")[_0x1158b2(0x2f8,\"In5l\")](\"\\x20\",\"\")[_0x1158b2(0x2ca,\"d7lC\")]();_0x51ec2f=_0x51ec2f[_0x1158b2(0x25e,\"eVa]\")](/<[^>]+>/g,\"\");if(_0x51ec2f[_0x1158b2(0x288,\"ahEa\")](_0x133263)!=-0x1&&_0x51ec2f[_0x1158b2(0x258,\"cwO@\")](\"\u9286\ufffd\"+_0x5feb03+\"\u9286\ufffd\")){let _0x560d6b=_0x592036[_0x1158b2(0x1c7,\"bVbk\")](_0x592036[_0x1158b2(0x39a,\"TzO2\")],_0x330fcc[0x1]);console[_0x1158b2(0x1cd,\"Ihzl\")](_0x1158b2(0x257,\"oHF4\"),_0x560d6b);let _0x55b955=(await axios_1[_0x1158b2(0x2a3,\"R!KE\")][_0x1158b2(0x34e,\"Ihzl\")](_0x560d6b))[_0x1158b2(0x264,\"xpf7\")];console[_0x1158b2(0x277,\"bVbk\")](_0x560d6b);let _0x52df5d=_0x55b955[_0x1158b2(0x1ce,\"bVbk\")](/get_music.php(.*)'/);console[_0x1158b2(0x1f5,\"lyEW\")](_0x52df5d);if(_0x592036[_0x1158b2(0x2f3,\"Kv(q\")](_0x52df5d,null))return _0x592036[_0x1158b2(0x2ee,\"3Bza\")](_0x592036[_0x1158b2(0x228,\"xDpZ\")],_0x592036[_0x1158b2(0x331,\"Hnke\")])?{id:_0x10bab8[_0x1158b2(0x125,\"In5l\")],artist:_0x319fc0[_0x1158b2(0x267,\"pRs!\")](_0x1f2163[_0x1158b2(0x260,\"K7!#\")]||\"\"),title:_0x3b4734[_0x1158b2(0x203,\"g7(K\")](_0x2b52b9[_0x1158b2(0x2ec,\"^gV4\")]||\"\"),artwork:_0x290c1a[_0x1158b2(0x2bc,\"K7!#\")]??_0x2a84f4(_0x309400[_0x1158b2(0x2d5,\"Hnke\")]),description:_0xa6f245[_0x1158b2(0x224,\"oHF4\")](_0x553726[_0x1158b2(0x37a,\"lyEW\")]||\"\"),date:_0xb58ec0[_0x1158b2(0x372,\"3Bza\")],artistId:_0x2638fa[_0x1158b2(0x222,\"jV#G\")],}:{url:\"\"};if(_0x592036[_0x1158b2(0x1d0,\"lyEW\")](_0x52df5d[_0x1158b2(0x15c,\"^gV4\")],0x1)&&_0x592036[_0x1158b2(0x1bb,\"L#*p\")](_0x52df5d[0x1][_0x1158b2(0x226,\"R!KE\")](_0x1158b2(0x2b2,\"COgm\")),-0x1))return((_0x199d5a=_0x592036[_0x1158b2(0x30c,\"3b)s\")](_0x592036[_0x1158b2(0x189,\"dO0Q\")],_0x52df5d[0x1])),{url:_0x199d5a})}}return{url:\"\"}}catch(_0x5dbeed){return _0x1158b2(0x13c,\"R#rH\")!==_0x592036[_0x1158b2(0x321,\"273M\")]?(_0x1d3669[_0x1158b2(0x1bc,\"pRs!\")](\"ex\",_0x8e60f4),{url:\"\"}):(_0x592036[_0x1158b2(0x33e,\"ProO\")](traceLog,_0x592036[_0x1158b2(0x1cb,\"273M\")],_0x5dbeed),{url:\"\"})}}async function getMusicMuJie(_0x4ef7e0){const _0x47f20a=_0x5e6c5c,_0x5d870d={FQYeQ:_0x47f20a(0x2af,\"lyEW\"),KmRAz:function(_0x13a729,_0x33e94d){return _0x13a729!=_0x33e94d},};try{console[_0x47f20a(0x342,\"273M\")](_0x47f20a(0x371,\"7@aK\"),_0x4ef7e0);const _0x15816b=_0x47f20a(0x24e,\"jV#G\")+_0x4ef7e0[\"id\"]+_0x47f20a(0x234,\"TzO2\"),_0x328b59=(await(0x0,axios_1[_0x47f20a(0x35c,\"3Gme\")])({url:_0x15816b,method:_0x5d870d[_0x47f20a(0x1a6,\"dO0Q\")],}))[_0x47f20a(0x154,\"bVbk\")];return(console[_0x47f20a(0x1af,\"R198\")](\"\u6769\u65bf\u6d16\",_0x328b59),_0x328b59&&_0x5d870d[_0x47f20a(0x287,\"*N1k\")](_0x328b59,\"\")?{url:_0x328b59}:{url:\"\"})}catch(_0x3e89b0){return console[_0x47f20a(0x195,\"ProO\")](\"ex\",_0x3e89b0),{url:\"\"}}}async function getMusicJxcxin(_0xd52969){const _0x270a9f=_0x5e6c5c,_0xd27f08={ohlMl:function(_0x1fd1e2,_0x3e3fb3){return _0x1fd1e2==_0x3e3fb3},CEkFY:_0x270a9f(0x32a,\"Kv(q\"),vFPdc:function(_0x51948e,_0x3bbbd2){return _0x51948e!==_0x3bbbd2},jGsbx:_0x270a9f(0x38d,\"In5l\"),};try{const _0x3be8b9=_0x270a9f(0x266,\"oHF4\")+_0xd52969[\"id\"]+_0x270a9f(0x31d,\"3Gme\"),_0x443fa9=(await(0x0,axios_1[_0x270a9f(0x2ef,\"g7(K\")])({url:_0x3be8b9,method:_0x270a9f(0x16a,\"GWg&\"),timeout:0xbb8,}))[_0x270a9f(0x212,\"hB9b\")];return _0xd27f08[_0x270a9f(0x34f,\"jV#G\")](_0x443fa9[_0x270a9f(0x391,\"pRs!\")],0xc8)?{url:_0x443fa9[_0x270a9f(0x171,\"3Bza\")][_0x270a9f(0x2c6,\"cwO@\")]}:_0x270a9f(0x1b5,\"dO0Q\")!==_0xd27f08[_0x270a9f(0x124,\"&1Ej\")]?{url:\"\"}:{url:\"\"}}catch(_0x24ad02){if(_0xd27f08[_0x270a9f(0x20b,\"COgm\")](_0xd27f08[_0x270a9f(0x314,\"eVa]\")],_0xd27f08[_0x270a9f(0x322,\"$srB\")]))_0xd5a5e3=_0x1c6c35[_0x270a9f(0x22d,\"Ihzl\")](/^\\s*(\\d+)\\s*$/);else return{url:\"\"}}}async function getMusicKuWoApp(_0x4da330){const _0x182dd5=_0x5e6c5c,_0x325530={QTAPq:function(_0x2b45e3,_0x45a839,_0x31ed79){return _0x2b45e3(_0x45a839,_0x31ed79)},AUfrl:function(_0x2f2419,_0x3d8de5){return _0x2f2419===_0x3d8de5},MXloR:function(_0x16785c,_0x4bee15){return _0x16785c/_0x4bee15},PFvKW:_0x182dd5(0x148,\"R!KE\"),cWwxU:function(_0x4a779f,_0x3896a3){return _0x4a779f+_0x3896a3},zMVNQ:function(_0x447c92,_0x53f77e){return _0x447c92!=_0x53f77e},LSKBw:_0x182dd5(0x37b,\"ahEa\"),ZWorJ:_0x182dd5(0x3a2,\"eVa]\"),SHPAc:_0x182dd5(0x137,\"pRs!\"),SMtsZ:_0x182dd5(0x1fb,\"8C&^\"),STWVS:_0x182dd5(0x184,\"oHF4\"),Ghseq:function(_0x512ffd,_0x4257a0){return _0x512ffd===_0x4257a0},BDfEx:_0x182dd5(0x14d,\"3Bza\"),};try{if(_0x325530[_0x182dd5(0x145,\"vlC&\")](_0x182dd5(0x18b,\"xpf7\"),_0x182dd5(0x259,\"COgm\")))return{url:\"\"};else{let _0x2af935=Math[_0x182dd5(0x36b,\"TzO2\")](_0x325530[_0x182dd5(0x2f0,\"3b)s\")](new Date()[_0x182dd5(0x2b4,\"z6x)\")](),0x3e8))[_0x182dd5(0xeb,\"npV(\")](),_0x4fcf20=_0x325530[_0x182dd5(0x1eb,\"273M\")],_0x2a7090=CryptoJS[_0x182dd5(0x294,\"bVbk\")](_0x325530[_0x182dd5(0x204,\"bVbk\")](_0x4da330[\"id\"],_0x4fcf20)+_0x2af935);const _0x19d92a=_0x182dd5(0x1e3,\"^gV4\")+_0x2a7090+_0x182dd5(0x2a7,\"273M\")+_0x4da330[\"id\"]+_0x182dd5(0x249,\"d7lC\")+_0x2af935,_0x48fac4=(await axios_1[_0x182dd5(0x177,\"vlC&\")][_0x182dd5(0x1b1,\"Te(a\")](_0x19d92a))[_0x182dd5(0x13f,\"GWg&\")];if(_0x325530[_0x182dd5(0x109,\"lyEW\")](_0x48fac4[_0x182dd5(0x1c2,\"#B0Q\")],\"\")){if(_0x325530[_0x182dd5(0x176,\"G%K(\")]!==_0x325530[_0x182dd5(0x29a,\"8mCI\")]){let _0x216713={headers:{\"Content-Type\":_0x325530[_0x182dd5(0x198,\"hB9b\")],Host:_0x182dd5(0x13d,\"d7lC\"),Referer:_0x325530[_0x182dd5(0x26c,\"8mCI\")],},},_0x416df0=(await axios_1[_0x182dd5(0x36d,\"G%K(\")][_0x182dd5(0x2fc,\"QAOS\")](_0x48fac4[_0x182dd5(0x2c0,\"R!KE\")],_0x216713))[_0x182dd5(0x2ad,\"d7lC\")],_0x5c9e9c=_0x416df0[_0x182dd5(0x246,\"7I86\")](_0x325530[_0x182dd5(0x278,\"L#*p\")]),_0x4fe723=_0x416df0[_0x182dd5(0x27a,\"3Bza\")](_0x5c9e9c),_0x171a61=_0x4fe723[_0x182dd5(0x2f6,\"Hnke\")](\"\\x0d\\x0a\");return((_0x4fe723=_0x4fe723[_0x182dd5(0x10f,\"xpf7\")](0x4,_0x171a61)),{url:_0x4fe723})}else return{id:_0x29e4e6[_0x182dd5(0x1e8,\"QAOS\")],artwork:_0x4294fd(_0x4b05b9[_0x182dd5(0x106,\"L#*p\")]),title:_0xdfc39f[_0x182dd5(0x167,\"xpf7\")](_0x438fcf[_0x182dd5(0x2fb,\"273M\")]||\"\"),artist:_0x58ef82[_0x182dd5(0x1e4,\"ufNv\")](_0x629073[_0x182dd5(0x1ef,\"g7(K\")]||\"\"),album:_0x41d964[_0x182dd5(0x231,\"kMX9\")](_0xf4806b[_0x182dd5(0x28c,\"Ihzl\")]||\"\"),albumId:_0x1bb097[_0x182dd5(0x11e,\"#B0Q\")],artistId:_0x344932[_0x182dd5(0x2d9,\"Ihzl\")],formats:_0x538ac6[_0x182dd5(0x2b1,\"COgm\")],}}}}catch(_0x5be300){return _0x325530[_0x182dd5(0x2d1,\"In5l\")](_0x325530[_0x182dd5(0x1f7,\"7I86\")],_0x182dd5(0x130,\"MJt[\"))?_0x325530[_0x182dd5(0x1b6,\"jV#G\")](_0x11fcb8,_0x201585,_0x42237f):{url:\"\"}}return{url:\"\"}}async function getMusicSource(_0x230e8c){const _0x5818ae=_0x5e6c5c,_0x214eae={mOlZN:function(_0x485f03,_0x4a53f2){return _0x485f03!==_0x4a53f2},tqHaW:_0x5818ae(0x2de,\"$srB\"),pwdxs:function(_0x1803f7,_0x4a583f){return _0x1803f7(_0x4a583f)},rZByX:_0x5818ae(0x293,\"&1Ej\"),xrAMy:function(_0x37e8f4,_0x217b28){return _0x37e8f4==_0x217b28},GCrco:function(_0x4ceaa4,_0x4d12a6){return _0x4ceaa4==_0x4d12a6},};if(_0x230e8c[_0x5818ae(0x1ed,\"8mCI\")])return _0x214eae[_0x5818ae(0x303,\"7I86\")](_0x5818ae(0xf7,\"TzO2\"),_0x214eae[_0x5818ae(0x35f,\"kMX9\")])?await _0x214eae[_0x5818ae(0xf8,\"7@aK\")](getMusicKuWo,_0x230e8c):_0x441172(_0x4820df,_0x220314);else{if(_0x214eae[_0x5818ae(0x1c3,\"In5l\")](_0x5818ae(0x126,\"MJt[\"),_0x214eae[_0x5818ae(0x38a,\"K7!#\")]))return{id:_0x3e31df[_0x5818ae(0x122,\"xDpZ\")],title:_0x22fba2[_0x5818ae(0x1b4,\"bVbk\")](_0x16791c[_0x5818ae(0x2ac,\"xpf7\")]||\"\"),artist:_0x2b1a68[_0x5818ae(0x224,\"oHF4\")](_0x187b26[_0x5818ae(0x17f,\"kMX9\")]||\"\"),artwork:_0x4cc6f3[_0x5818ae(0x2d7,\"L#*p\")],playCount:_0x19b9d3[_0x5818ae(0x2e7,\"COgm\")],description:_0x56cbbd[_0x5818ae(0x233,\"Ihzl\")](_0x39c2ff[_0x5818ae(0xf9,\"xDpZ\")]||\"\"),worksNum:_0x4a4cf4[_0x5818ae(0x2a2,\"&1Ej\")],};else{let _0x1f15c0=await getMusicKuWoApp(_0x230e8c);return((_0x1f15c0=_0x214eae[_0x5818ae(0x33a,\"ufNv\")](_0x1f15c0[_0x5818ae(0x286,\"kMX9\")],\"\")?await getMusicJxcxin(_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x299,\"ahEa\")](_0x1f15c0[_0x5818ae(0xfd,\"xpf7\")],\"\")?await _0x214eae[_0x5818ae(0x29c,\"z6x)\")](getMusicZZ123,_0x230e8c):_0x1f15c0),(_0x1f15c0=_0x214eae[_0x5818ae(0x196,\"$srB\")](_0x1f15c0[_0x5818ae(0x30d,\"3Gme\")],\"\")?await getMusicFangpi(_0x230e8c):_0x1f15c0),_0x1f15c0)}}}module[_0x5e6c5c(0x16f,\"kMX9\")]={platform:'\u9177\u6211',version:_0x5e6c5c(0x103,\"hB9b\"),srcUrl:'https://gitee.com/maotoumao/plugins-list1/raw/master/kuwo.js',cacheControl:_0x5e6c5c(0x289,\"#B0Q\"),hints:{importMusicSheet:[_0x5e6c5c(0x2cb,\"Hnke\"),_0x5e6c5c(0x252,\"ufNv\"),_0x5e6c5c(0x1ae,\"8C&^\"),],},supportedSearchType:[_0x5e6c5c(0xe7,\"#B0Q\"),_0x5e6c5c(0x244,\"Te(a\"),_0x5e6c5c(0x135,\"COgm\"),_0x5e6c5c(0x104,\"TzO2\"),],async search(_0xc31c7d,_0x40f423,_0xcd3816){const _0x184c7e=_0x5e6c5c,_0x1714a4={UsNgC:function(_0x232450,_0x3d5602,_0x1911b0){return _0x232450(_0x3d5602,_0x1911b0)},YPzif:function(_0x3ccdbd,_0x4f5881){return _0x3ccdbd===_0x4f5881},NFmif:_0x184c7e(0x355,\"xpf7\"),jOHAt:function(_0xdf06de,_0x55f38b){return _0xdf06de===_0x55f38b},EPofd:_0x184c7e(0x34a,\"R#rH\"),XSKVn:_0x184c7e(0x290,\"eVa]\"),GdXTZ:function(_0x1f688a,_0x3761e9){return _0x1f688a===_0x3761e9},ZrzqN:_0x184c7e(0x2ff,\"Te(a\"),xpznH:_0x184c7e(0xe9,\"xpf7\"),cbCMl:function(_0x93de01,_0x3b5c48,_0x186df3){return _0x93de01(_0x3b5c48,_0x186df3)},};if(_0xcd3816===_0x184c7e(0x201,\"kMX9\"))return await _0x1714a4[_0x184c7e(0x199,\"xDpZ\")](searchMusic,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x1a5,\"eVa]\")](_0xcd3816,_0x1714a4[_0x184c7e(0x30f,\"oHF4\")]))return await _0x1714a4[_0x184c7e(0x1a8,\"ahEa\")](searchAlbum,_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x2aa,\"MJt[\")](_0xcd3816,_0x1714a4[_0x184c7e(0x1aa,\"8mCI\")]))return await searchArtist(_0xc31c7d,_0x40f423);if(_0x1714a4[_0x184c7e(0x139,\"L#*p\")](_0xcd3816,_0x1714a4[_0x184c7e(0x2fa,\"@eI6\")]))return _0x1714a4[_0x184c7e(0x185,\"g7(K\")](_0x1714a4[_0x184c7e(0x1a9,\"*N1k\")],_0x1714a4[_0x184c7e(0x21e,\"^gV4\")])?{id:_0x221f15[_0x184c7e(0x18a,\"@eI6\")],avatar:_0x3f5eee[_0x184c7e(0x159,\"z6x)\")],name:_0x460bc2[_0x184c7e(0x19b,\"TzO2\")](_0x44dff8[_0x184c7e(0x327,\"3Gme\")]||\"\"),artistId:_0x1736fd[_0x184c7e(0x325,\"dO0Q\")],description:_0x274831[_0x184c7e(0x203,\"g7(K\")](_0x42f809[_0x184c7e(0x2a8,\"In5l\")]||\"\"),worksNum:_0xf4cc89[_0x184c7e(0x20d,\"bVbk\")],}:await _0x1714a4[_0x184c7e(0x354,\"L#*p\")](searchMusicSheet,_0xc31c7d,_0x40f423)},async getMediaSource(_0x5abdd9,_0x11b1d6){const _0x49f520=_0x5e6c5c,_0x2c0169={tLhag:function(_0x1797f8,_0x43ba2b){return _0x1797f8(_0x43ba2b)},};return await _0x2c0169[_0x49f520(0x164,\"In5l\")](getMusicSource,_0x5abdd9)},getAlbumInfo:getAlbumInfo,getLyric:getLyric,getArtistWorks:getArtistWorks,getTopLists:getTopLists,getTopListDetail:getTopListDetail,importMusicSheet:importMusicSheet,getRecommendSheetTags:getRecommendSheetTags,getRecommendSheetsByTag:getRecommendSheetsByTag,getMusicSheetInfo:getMusicSheetInfo,};var version_=\"jsjiami.com.v7\";", "id": "msg_1789568511082"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: 酷我, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568511082: True [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: 酷我 [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_竹玥 [2026-09-16 22:21:51] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:21:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: node:internal/process/promises:394 [2026-09-16 22:21:51] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "\u9177\u72d7_\u7af9\u73a5", "code": "var $hTj9b$axios = require(\"axios\");\nvar $hTj9b$cheerio = require(\"cheerio\");\nvar $hTj9b$cryptojs = require(\"crypto-js\");\nvar $hTj9b$he = require(\"he\");\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n$parcel$defineInteropFlag(module.exports);\n\n$parcel$export(module.exports, \"default\", () => $28c810e89c2349b3$export$2e2bcd8739ae039);\n\nconst $28c810e89c2349b3$var$pageSize = 20;\n\nfunction $28c810e89c2349b3$var$formatMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n return {\n id: (_d = _.FileHash) !== null && _d !== void 0 ? _d : _.Grp[0].FileHash,\n title: (_a = _.SongName) !== null && _a !== void 0 ? _a : _.OriSongName,\n artist: (_b = _.SingerName) !== null && _b !== void 0 ? _b : _.Singers[0].name,\n album: (_c = _.AlbumName) !== null && _c !== void 0 ? _c : _.Grp[0].AlbumName,\n album_id: (_e = _.AlbumID) !== null && _e !== void 0 ? _e : _.Grp[0].AlbumID,\n album_audio_id: 0,\n duration: _.Duration,\n artwork: ((_f = _.Image) !== null && _f !== void 0 ? _f : _.Grp[0].Image).replace(\"{size}\", \"1080\"),\n \"320hash\": (_i = _.HQFileHash) !== null && _i !== void 0 ? _i : undefined,\n sqhash: (_g = _.SQFileHash) !== null && _g !== void 0 ? _g : undefined,\n ResFileHash: (_h = _.ResFileHash) !== null && _h !== void 0 ? _h : undefined\n };\n}\n\nfunction $28c810e89c2349b3$var$formatMusicItem2(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n return {\n id: _.hash,\n title: _.songname,\n artist: (_a = _.singername) !== null && _a !== void 0 ? _a : ((_c = (_b = _.authors) === null || _b === void 0 ? void 0 : _b.map((_)=>{\n var _a;\n return (_a = _ === null || _ === void 0 ? void 0 : _.author_name) !== null && _a !== void 0 ? _a : \"\";\n })) === null || _c === void 0 ? void 0 : _c.join(\", \")) || ((_f = (_e = (_d = _.filename) === null || _d === void 0 ? void 0 : _d.split(\"-\")) === null || _e === void 0 ? void 0 : _e[0]) === null || _f !== void 0 ? _f : _f.trim()),\n album: (_g = _.album_name) !== null && _g !== void 0 ? _g : _.remark,\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: _.album_sizable_cover ? _.album_sizable_cover.replace(\"{size}\", \"400\") : undefined,\n duration: _.duration,\n \"320hash\": _[\"320hash\"],\n sqhash: _.sqhash,\n origin_hash: _.origin_hash\n };\n}\n\nfunction $28c810e89c2349b3$var$formatImportMusicItem(_) {\n var _a, _b, _c, _d, _e, _f, _g;\n let title = _.name;\n const singerName = _.singername;\n if (singerName && title) {\n const index = title.indexOf(singerName);\n if (index !== -1) title = (_a = title.substring(index + singerName.length + 2)) === null || _a === void 0 ? void 0 : _a.trim();\n if (!title) title = singerName;\n }\n const qualites = _.relate_goods;\n return {\n id: _.hash,\n title: title,\n artist: singerName,\n album: (_b = _.albumname) !== null && _b !== void 0 ? _b : \"\",\n album_id: _.album_id,\n album_audio_id: _.album_audio_id,\n artwork: (_d = (_c = _ === null || _ === void 0 ? void 0 : _.info) === null || _c === void 0 ? void 0 : _c.image) === null || _d === void 0 ? void 0 : _d.replace(\"{size}\", \"400\"),\n \"320hash\": (_e = qualites === null || qualites === void 0 ? void 0 : qualites[1]) === null || _e === void 0 ? void 0 : _e.hash,\n sqhash: (_f = qualites === null || qualites === void 0 ? void 0 : qualites[2]) === null || _f === void 0 ? void 0 : _f.hash,\n origin_hash: (_g = qualites === null || qualites === void 0 ? void 0 : qualites[3]) === null || _g === void 0 ? void 0 : _g.hash\n };\n}\n\nconst $28c810e89c2349b3$var$headers = {\n \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Accept: \"*/*\",\n \"Accept-Encoding\": \"gzip, deflate\",\n \"Accept-Language\": \"zh-CN,zh;q=0.9\"\n};\n\nasync function $28c810e89c2349b3$var$searchMusic(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"https://songsearch.kugou.com/song_search_v2\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n userid: 0,\n clientver: \"\",\n platform: \"WebFilter\",\n filter: 2,\n iscorrection: 1,\n privilege_filter: 0,\n area_code: 1\n }\n })).data;\n const songs = res.data.lists.map($28c810e89c2349b3$var$formatMusicItem);\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: songs\n };\n}\n\nasync function $28c810e89c2349b3$var$searchAlbum(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://msearch.kugou.com/api/v3/search/album\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n version: 9108,\n iscorrection: 1,\n highlight: \"em\",\n plat: 0,\n keyword: query,\n pagesize: 20,\n page: page,\n sver: 2,\n with_res_tag: 0\n }\n })).data;\n const albums = res.data.info.map((_)=>{\n var _a, _b;\n return {\n id: _.albumid,\n artwork: (_a = _.imgurl) === null || _a === void 0 ? void 0 : _a.replace(\"{size}\", \"400\"),\n artist: _.singername,\n title: (0, $hTj9b$cheerio.load)(_.albumname).text(),\n description: _.intro,\n date: (_b = _.publishtime) === null || _b === void 0 ? void 0 : _b.slice(0, 10)\n };\n });\n return {\n isEnd: page * 20 >= res.data.total,\n data: albums\n };\n}\n\nasync function $28c810e89c2349b3$var$searchMusicSheet(query, page) {\n const res = (await (0, ($parcel$interopDefault($hTj9b$axios))).get(\"http://mobilecdn.kugou.com/api/v3/search/special\", {\n headers: $28c810e89c2349b3$var$headers,\n params: {\n format: \"json\",\n keyword: query,\n page: page,\n pagesize: $28c810e89c2349b3$var$pageSize,\n showtype: 1\n }\n })).data;\n const sheets = res.data.info.map((item)=>({\n title: item.specialname,\n createAt: item.publishtime,\n description: item.intro,\n artist: item.nickname,\n coverImg: item.imgurl,\n gid: item.gid,\n playCount: item.playcount,\n id: item.specialid,\n worksNum: item.songcount\n }));\n return {\n isEnd: page * $28c810e89c2349b3$var$pageSize >= res.data.total,\n data: sheets\n };\n}\n\nconst $28c810e89c2349b3$var$qualityLevels = {\n low: \"128k\",\n standard: \"320k\",\n high: \"flac\",\n super: \"flac24bit\"\n};\n\nconst $28c810e89c2349b3$var$sha256 = (function() {\n \"use strict\";\n var HEX_CHARS = '0123456789abcdef'.split('');\n \n function Sha256() {\n this.blocks = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];\n this.h0 = 0x6a09e667;\n this.h1 = 0xbb67ae85;\n this.h2 = 0x3c6ef372;\n this.h3 = 0xa54ff53a;\n this.h4 = 0x510e527f;\n this.h5 = 0x9b05688c;\n this.h6 = 0x1f83d9ab;\n this.h7 = 0x5be0cd19;\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n }\n\n Sha256.prototype.update = function(message) {\n if (this.finalized) return;\n \n var notString = typeof message !== 'string';\n var blocks = t, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:21:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: triggerUncaughtException(err, true /* fromPromise */); [2026-09-16 22:21:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ^ [2026-09-16 22:21:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: [2026-09-16 22:21:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: AxiosError: Request failed with status code 503 [2026-09-16 22:21:51] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at settle (/app/node_modules/axios/dist/node/axios.cjs:2090:12) [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.handleStreamEnd (/app/node_modules/axios/dist/node/axios.cjs:3788:11) [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at IncomingMessage.emit (node:events:520:35) [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at endReadableNT (node:internal/streams/readable:1729:12) [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:90:21) [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at Axios.request (/app/node_modules/axios/dist/node/axios.cjs:5133:41) [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at process.processTicksAndRejections (node:internal/process/task_queues:104:5) [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: at async $28c810e89c2349b3$var$getMediaSource (evalmachine.:180:19) { [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: isAxiosError: true, [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: code: 'ERR_BAD_RESPONSE', [2026-09-16 22:21:52] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: config: [Object: null prototype] { [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transitional: { [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: silentJSONParsing: true, [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: forcedJSONParsing: true, [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: clarifyTimeoutError: false, [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: legacyInterceptorReqResOrdering: true, [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: advertiseZstdAcceptEncoding: false [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: adapter: [ 'xhr', 'http', 'fetch' ], [2026-09-16 22:21:53] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformRequest: [ [Function: transformRequest] ], [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: transformResponse: [ [Function: transformResponse] ], [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfCookieName: 'XSRF-TOKEN', [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: xsrfHeaderName: 'X-XSRF-TOKEN', [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxContentLength: -1, [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxBodyLength: -1, [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: env: { [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: FormData: [Function: FormData] { [2026-09-16 22:21:54] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: LINE_BREAK: '\r\n', [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: DEFAULT_CONTENT_TYPE: 'application/octet-stream' [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Blob: [class Blob] [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: validateStatus: [Function: validateStatus], [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: headers: Object [AxiosHeaders] { [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Accept: 'application/json, text/plain, */*', [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Content-Type': undefined, [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'X-Request-Key': 'share-v2', [2026-09-16 22:21:55] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'User-Agent': 'axios/1.17.0', [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding': 'gzip, compress, deflate, br' [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: method: 'get', [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: url: 'https://lxmusicapi.onrender.com/url/kg/DBF4C9254E435BD743EEF04B98094FFA/320k', [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowAbsoluteUrls: true, [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: data: undefined [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: request: ClientRequest { [2026-09-16 22:21:56] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: abort: [Function (anonymous)], [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: aborted: [Function (anonymous)], [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connect: [Function (anonymous)], [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: error: [Function (anonymous)], [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: socket: [Function (anonymous)], [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: [Function (anonymous)], [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finish: [Function: requestOnFinish] [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 7, [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:57] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputData: [], [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: outputSize: 0, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: writable: true, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: destroyed: true, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _last: true, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: chunkedEncoding: false, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: shouldKeepAlive: true, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: maxRequestsOnConnectionReached: false, [2026-09-16 22:21:58] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _defaultKeepAlive: true, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: useChunkedEncodingByDefault: false, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sendDate: false, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedConnection: false, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedContLen: false, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _removedTE: false, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: strictContentLength: false, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _contentLength: 0, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hasBody: true, [2026-09-16 22:21:59] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _trailer: '', [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: finished: true, [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _headerSent: true, [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closed: true, [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _header: 'GET /url/kg/DBF4C9254E435BD743EEF04B98094FFA/320k HTTP/1.1\r\n' + [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: application/json, text/plain, */*\r\n' + [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'X-Request-Key: share-v2\r\n' + [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'User-Agent: axios/1.17.0\r\n' + [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept-Encoding: gzip, compress, deflate, br\r\n' + [2026-09-16 22:22:00] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Host: lxmusicapi.onrender.com\r\n' + [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _keepAliveTimeout: 0, [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _onPendingData: [Function: nop], [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: agent: Agent { [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype] { [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: free: [Function (anonymous)], [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: newListener: [Function: maybeEnableKeylog] [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:22:01] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 2, [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: options: [Object: null prototype] { [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: keepAlive: true, [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: scheduling: 'lifo', [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: proxyEnv: undefined, [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: noDelay: true, [2026-09-16 22:22:02] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: path: null [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: defaultPort: 443, [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: protocol: 'https:', [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: requests: [Object: null prototype] {}, [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: sockets: [Object: null prototype] { [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'zz123.com:443:::::::::::::::::::::': [ [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: TLSSocket { [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: [Object], [2026-09-16 22:22:03] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: false, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: true, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: null, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: null, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: false, [2026-09-16 22:22:04] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 12, [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: true, [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'zz123.com', [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: [ReadableState], [2026-09-16 22:22:05] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: [WritableState], [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: 'GET / HTTP/1.1\r\n' + [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Accept: */*\r\n' + [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'accept-encoding: gzip, deflate, br\r\n' + [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.61\r\n' + [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Host: zz123.com\r\n' + [2026-09-16 22:22:06] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'Connection: keep-alive\r\n' + [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: '\r\n', [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: 'latin1', [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: [TLSWrap], [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 0, [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: [HTTPParser], [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:07] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: [ClientRequest], [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): [TLSWrap], [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): false, [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): 54, [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): [TLSWrap], [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): [Timeout], [2026-09-16 22:22:08] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferCb): null, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferGen): null, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(shapeMode): true, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kCapture): false, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetNoDelay): false, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAlive): true, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kSetKeepAliveInitialDelay): 60, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesRead): 0, [2026-09-16 22:22:09] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBytesWritten): 0, [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(connect-options): [Object], [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.socketListener): true, [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(axios.http.currentReq): [Writable] [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: } [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ] [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: }, [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: freeSockets: [Object: null prototype] { [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: 'songsearch.kugou.com:443:::::::::::::::::::::': [ [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: TLSSocket { [2026-09-16 22:22:10] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _tlsOptions: [Object], [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _secureEstablished: true, [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _securePending: false, [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _newSessionPending: false, [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _controlReleased: true, [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: secureConnecting: false, [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _SNICallback: null, [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: servername: 'songsearch.kugou.com', [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: alpnProtocol: false, [2026-09-16 22:22:11] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorized: true, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: authorizationError: null, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: encrypted: true, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _events: [Object: null prototype], [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _eventsCount: 9, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: connecting: false, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _hadError: false, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _parent: null, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _host: 'songsearch.kugou.com', [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _closeAfterHandlingError: false, [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:12] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _readableState: [ReadableState], [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _writableState: [WritableState], [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: allowHalfOpen: false, [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _maxListeners: undefined, [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _sockname: null, [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingData: null, [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _pendingEncoding: '', [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: server: undefined, [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _server: null, [2026-09-16 22:22:13] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: ssl: [TLSWrap], [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _requestCert: true, [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _rejectUnauthorized: true, [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: timeout: 5000, [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: parser: null, [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: _httpMessage: null, [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: autoSelectFamilyAttemptedAddresses: [Array], [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(alpncallback): null, [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(res): [TLSWrap], [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(verified): true, [2026-09-16 22:22:14] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(pendingSession): null, [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(async_id_symbol): -1, [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kHandle): [TLSWrap], [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(lastWriteQueueSize): 0, [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(timeout): [Timeout], [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBuffer): null, [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Symbol(kBufferC [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:15] [0.6.1] [ERROR] js_plugin_manager.py:160: Node.js process error output: Node.js v24.14.1 [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:17] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:19] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:20] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_竹玥: Message msg_1789568511384 timeout [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 爱听 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 爱听: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我Fish [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我Fish: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ音乐 (非VIP) [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易专辑 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易专辑: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易音乐 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易音乐: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词千寻 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词千寻: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易bimiao [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易bimiao: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力MG [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力MG: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌曲宝 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌曲宝: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水qishui音乐 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水qishui音乐: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: suno [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin suno: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹侣 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹侣: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_笭鬼鬼 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_竹玥 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_竹玥: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_笭鬼鬼 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_笭鬼鬼: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 哔哩哔哩_Cookie [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 哔哩哔哩_Cookie: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 弥音QQ [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 弥音QQ: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗简云 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗简云: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 好听轻音乐 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 好听轻音乐: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 音悦台 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 音悦台: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: WebDAV [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin WebDAV: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Q音 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Q音: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: bilibili [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin bilibili: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_猫 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_猫: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我音乐Thomas [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我音乐Thomas: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 开心汽水 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 开心汽水: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GD音乐台 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GD音乐台: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云音乐 (非VIP) [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云音乐 (非VIP): Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 歌词网 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 歌词网: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 喜马拉雅_竹侣 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 喜马拉雅_竹侣: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_念心 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_念心: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云音乐 (酷我非VIP) [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云音乐 (酷我非VIP): Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力WY [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力WY: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 云云音乐 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 云云音乐: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易云电台 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易云电台: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力KW [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力KW: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗Thomas [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗Thomas: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 碳酸氢钠 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 碳酸氢钠: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 闻音酷我 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 闻音酷我: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_猫 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_猫: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ Vip [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ Vip: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: CCTV听音 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin CCTV听音: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 小蜗音乐 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 小蜗音乐: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 元力QQ [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 元力QQ: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_念心 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_念心: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_念心 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_念心: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我_猫 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我_猫: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Navidrome [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Navidrome: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: GitCode [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin GitCode: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷我JHMS [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷我JHMS: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 酷狗_念心 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 酷狗_念心: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 5sing [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 5sing: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 网易_竹玥 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 网易_竹玥: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 落月QQ [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 落月QQ: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ_竹玥 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ_竹玥: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Youtube [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin Youtube: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ歌词 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin QQ歌词: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 汽水vip [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 汽水vip: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 腾讯音乐 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 腾讯音乐: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 千千 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 千千: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: 溯音网易 [2026-09-16 22:22:21] [0.6.1] [WARNING] js_plugin_manager.py:177: Node.js process not available, checking restart possibility... [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:21] [0.6.1] [ERROR] js_plugin_manager.py:993: Failed to load JS plugin 溯音网易: Node.js process not available and restart failed [2026-09-16 22:22:21] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'status': 'loaded', 'load_time': 1789568507.160816, 'enabled': True}, '元力KG': {'status': 'loaded', 'load_time': 1789568507.463061, 'enabled': True}, '碳酸歌词': {'status': 'loaded', 'load_time': 1789568507.7640998, 'enabled': True}, '网易Ciallo~(∠・ω_ )⌒☆': {'status': 'loaded', 'load_time': 1789568508.3680274, 'enabled': True}, '猫耳FM': {'status': 'loaded', 'load_time': 1789568508.6690989, 'enabled': True}, 'Audiomack': {'status': 'loaded', 'load_time': 1789568508.970556, 'enabled': True}, '迟言QQ': {'status': 'loaded', 'load_time': 1789568509.272142, 'enabled': True}, 'udio': {'status': 'loaded', 'load_time': 1789568509.5744548, 'enabled': True}, '酷狗JHMS': {'status': 'loaded', 'load_time': 1789568509.8758457, 'enabled': True}, '种子': {'status': 'loaded', 'load_time': 1789568510.1773531, 'enabled': True}, '小枸音乐': {'status': 'loaded', 'load_time': 1789568510.4787736, 'enabled': True}, '西瓜糖QQ': {'status': 'loaded', 'load_time': 1789568510.780321, 'enabled': True}, '快手': {'status': 'loaded', 'load_time': 1789568511.0815392, 'enabled': True}, '酷我': {'status': 'loaded', 'load_time': 1789568511.3838766, 'enabled': True}} [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:22] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:24] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:25] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:27] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:29] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:30] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:32] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:34] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:35] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:35] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:35] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:37] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:39] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:40] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:42] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:44] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:45] [0.6.1] [ERROR] js_plugin_manager.py:107: Node.js process restart limit exceeded: 1 restarts in 60 seconds. Manual intervention required. [2026-09-16 22:22:45] [0.6.1] [WARNING] js_plugin_manager.py:121: Node.js process died, attempting restart (1/1). Remaining attempts in current window: 0 [2026-09-16 22:22:45] [0.6.1] [INFO] js_plugin_manager.py:80: Node.js process started successfully [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin Audiomack [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:22:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789568578168"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:22:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568578168: True [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 22:22:58] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1789568578.7703767, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:22:59] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789568579018"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:22:59] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568579018: True [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 22:22:59] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1789568579.3200798, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'name': 'QQ音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:23:08] [0.6.1] [INFO] js_plugin_manager.py:2590: Plugin config updated for enabled plugin QQ音乐 (非VIP) [2026-09-16 22:23:08] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:23:08] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:23:08] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:23:08] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:23:08] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:23:08] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789568588786"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:08] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568588786: True [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ音乐 (非VIP) [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:23:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "code": "const axios_1 = require(\"axios\"),\n CryptoJs = require(\"crypto-js\"),\n he_1 = require(\"he\"),\n qs = require(\"qs\");\n\nlet Config = {\n server: \"https://adad23u.appinstall.life:2358\",\n platform: \"QQ\u97f3\u4e50\",\n key: \"88452cf25c1ca5b\",\n};\n\nlet ZZ123Config = {\n headers: {\n \"Content-Type\": \"application/json\",\n Referer: \"https://zz123.com/\",\n \"User-Agent\":\n \"MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",\n },\n};\n\nconst pageSize = 20;\n\nfunction formatYunMusicItem(musicItem) {\n return {\n id: musicItem.MUSICRID.replace(\n 'MUSIC_',\n \"\"\n ),\n title: (0, he_1.decode)(\n musicItem.NAME || \"\"\n ),\n artist: (0, he_1.decode)(\n musicItem.ARTIST || \"\"\n ),\n isfree:\n musicItem?.payInfo?.listen_fragment !== \"1\",\n };\n}\n\nfunction formatMusicItem(musicItem) {\n var _a, _b, _c;\n const albumid =\n musicItem.albumid ||\n ((_a = musicItem.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid =\n musicItem.albummid ||\n ((_b = musicItem.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname =\n musicItem.albumname ||\n ((_c = musicItem.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: musicItem.id || musicItem.songid,\n songmid: musicItem.mid || musicItem.songmid,\n title: musicItem.title || musicItem.songname,\n artist: musicItem.singer?.map((s) => s.name)?.join(\", \"),\n artwork: albummid\n ? `https://y.gtimg.cn/music/photo_new/T002R300x300M000${albummid}.jpg`\n : undefined,\n album: albumname,\n lrc: musicItem.lyric || undefined,\n albumid: albumid,\n albummid: albummid,\n isfree: musicItem.pay.pay_play === 0 || musicItem.pay.payplay === 0,\n };\n}\n\nconst chineseSel = (item) => {\n let res = [];\n const reg = /[\\u4e00-\\u9fa5]/g;\n return item && (res = item.match(reg)), res?.length ? res.join(\"\") : \"\";\n};\n\nfunction formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork:\n _.albumPic ||\n `https://y.gtimg.cn/music/photo_new/T002R300x300M000${_.albumMID || _.album_mid\n }.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc,\n };\n}\nfunction formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum,\n };\n}\n\nconst searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\",\n};\n\nconst headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\",\n};\n\nconst validSongFilter = () => {\n return true;\n};\n\nasync function searchBase(query, page, type) {\n const res = (\n await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: pageSize,\n page_num: page,\n query: query,\n search_type: type,\n },\n },\n },\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * pageSize,\n data: res.req_1.data.body[searchTypeMap[type]].list,\n };\n}\n\nasync function searchMusic(query, page) {\n const songs = await searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.filter(validSongFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const albums = await searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map(formatAlbumItem),\n };\n}\nasync function searchArtist(query, page) {\n const artists = await searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map(formatArtistItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const musicSheet = await searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item) => ({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name,\n })),\n };\n}\n\nasync function searchLyric(query, page) {\n const songs = await searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it) =>\n Object.assign(Object.assign({}, formatMusicItem(it)), {\n rawLrcTxt: it.content,\n })\n ),\n };\n}\n\nfunction getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) {\n s = sArr[1];\n } else {\n return key ? undefined : {};\n }\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item) => {\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n } catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction changeUrlQuery(obj, baseUrl) {\n const query = getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key) => {\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") {\n queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n }\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst typeMap = {\n 128: { s: \"M500\", e: \".mp3\" },\n 320: { s: \"M800\", e: \".mp3\" },\n m4a: { s: \"C400\", e: \".m4a\" },\n ape: { s: \"A000\", e: \".ape\" },\n flac: { s: \"F000\", e: \".flac\" },\n};\n\nasync function getSourceUrl(id, type = \"128\") {\n const mediaId = id;\n let uin = \"\";\n const guid = (Math.random() * 10000000).toFixed(0);\n const typeObj = typeMap[type];\n const file = `${typeObj.s}${id}${mediaId}${typeObj.e}`;\n const url = changeUrlQuery({\n \"-\": \"getplaysongvkey\",\n g_tk: 5381,\n loginUin: uin,\n hostUin: 0,\n format: \"json\",\n inCharset: \"utf8\",\n outCharset: \"utf-8\u00acice=0\",\n platform: \"yqq.json\",\n needNewCode: 0,\n data: JSON.stringify({\n req_0: {\n module: \"vkey.GetVkeyServer\",\n method: \"CgiGetVkey\",\n param: {\n filename: [file],\n guid: guid,\n songmid: [id],\n songtype: [0],\n uin: uin,\n loginflag: 1,\n platform: \"20\",\n },\n },\n comm: {\n uin: uin,\n format: \"json\",\n ct: 19,\n cv: 0,\n authst: \"\",\n },\n }),\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg\");\n return (await (0, axios_1.default)({\n method: \"GET\",\n url: url,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\nasync function getAlbumInfo(albumItem) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000,\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2,\n },\n module: \"music.musichallAlbum.AlbumSongList\",\n },\n }),\n },\n \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\"\n );\n const res = (\n await (0, axios_1.default)({\n url: url,\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n musicList: res.albumSonglist.data.songList\n .filter((_) => validSongFilter(_.songInfo))\n .map((item) => {\n const _ = item.songInfo;\n return formatMusicItem(_);\n }),\n };\n}\nasync function getArtistSongs(artistItem, page) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * pageSize,\n num: pageSize,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n },\n \"http://u.y.qq.com/cgi-bin/musicu.fcg\"\n );\n const res = (\n await (0, axios_1.default)({\n url: url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.singer.data.total_song <= page * pageSize,\n data: res.singer.data.songlist.filter(validSongFilter).map(formatMusicItem),\n };\n}\nasync function getArtistAlbums(artistItem, page) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * pageSize,\n num: pageSize / 1,\n exstatus: 1,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n },\n \"http://u.y.qq.com/cgi-bin/musicu.fcg\"\n );\n const res = (\n await (0, axios_1.default)({\n url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * pageSize,\n data: res.singerAlbum.data.list.map(formatAlbumItem),\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n return getArtistSongs(artistItem, page);\n }\n if (type === \"album\") {\n return getArtistAlbums(artistItem, page);\n }\n}\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid\n }&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: { Referer: \"https://y.qq.com\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const res = JSON.parse(\n result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n );\n let translation;\n if (res.trans) {\n translation = he.decode(\n CryptoJs.enc.Base64.parse(res.trans).toString(CryptoJs.enc.Utf8)\n );\n }\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(res.lyric).toString(CryptoJs.enc.Utf8)\n ),\n translation,\n };\n}\n\nasync function importMusicSheet(urlLike) {\n let id;\n if (!id) {\n id = (urlLike.match(\n /https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/\n ) || [])[1];\n }\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) ||\n [])[1];\n }\n if (!id) {\n id = (urlLike.match(/^(\\d+)$/) || [])[1];\n }\n if (!id) {\n return;\n }\n const result = (\n await (0, axios_1.default)({\n url: `http://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: { Referer: \"https://y.qq.com/n/yqq/playlist\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const res = JSON.parse(\n result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n );\n return res.cdlist[0].songlist.filter(validSongFilter).map(formatMusicItem);\n}\nasync function getTopLists() {\n const list = await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return list.data.topList.data.group.map((e) => ({\n title: e.groupName,\n data: e.toplist.map((_) => ({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl,\n })),\n }));\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n const res = await (0, axios_1.default)({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id\n }%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"\n }%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList\n .filter(validSongFilter)\n .map(formatMusicItem),\n });\n}\nasync function getRecommendSheetTags() {\n const res = (\n await axios_1.default.get(\n \"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\",\n {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n }\n )\n ).data.data.categories;\n const data = res.slice(1).map((_) => ({\n title: _.categoryGroupName,\n data: _.items.map((tag) => ({\n id: tag.categoryId,\n title: tag.categoryName,\n })),\n }));\n const pinned = [];\n for (let d of data) {\n if (d.data.length) {\n pinned.push(d.data[0]);\n }\n }\n return {\n pinned,\n data,\n };\n}\n\n\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (\n await axios_1.default.get(\n \"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\",\n {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId:\n (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1,\n },\n }\n )\n ).data;\n const res = JSON.parse(\n rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n ).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item) => {\n var _a, _b;\n return {\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist:\n (_b =\n (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !==\n null && _b !== void 0\n ? _b\n : \"\",\n };\n });\n return {\n isEnd,\n data,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const data = await importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data,\n };\n}\nasync function getMusicKuWoSource(musicItem) {\n try {\n\n let time = Math.round(Date.now() / 1e3).toString(),\n keyStr = '88452cf25c1ca5b',\n hash = CryptoJs.MD5(\n musicItem.third_id + keyStr + time\n );\n const url =\n 'https://sfuuc53rd.appinstall.life:8022/music/yun.php?flag=' +\n hash +\n 'id=' +\n musicItem.third_id +\n '&tm=' +\n time,\n res = (\n await axios_1.default.get(\n url\n )\n ).data;\n if (\n res.url !== \"\"\n ) {\n let params = {\n headers: {\n \"Content-Type\": 'application/json',\n Host: 'nmobi.kuwo.cn',\n Referer: 'https://www.kuwo.cn/search/list?key=',\n },\n },\n res1 = (\n await axios_1.default.get(\n res.url,\n params\n )\n ).data,\n spIdx = res1.indexOf(\n 'url='\n ),\n str2 = res1.substring(spIdx),\n idx2 = str2.indexOf(\"\\x0d\\x0a\");\n return (\n (str2 = str2.substring(4, idx2)),\n { url: str2 }\n );\n }\n\n } catch {\n\n }\n return { url: \"\" };\n}\n// async function viewLog(_0x10282d) {\n// const _0x351b4b = _0x372c47,\n// _0x36b694 = {\n// GJaOu: _0x351b4b(0x1a4, \"G*8K\"),\n// NPJtT: function (_0x196b96, _0xa18d55) {\n// return _0x196b96 === _0xa18d55;\n// },\n// shYmt: _0x351b4b(0x437, \"1]Wc\"),\n// ZRBpe: _0x351b4b(0x1d6, \"ESa4\"),\n// HYxjW: _0x351b4b(0x26f, \"gqjc\"),\n// AoPpm: function (_0x28f3fd, _0xe56bbe) {\n// return _0x28f3fd + _0xe56bbe;\n// },\n// tDOFe: function (_0x2748b7, _0x404124) {\n// return _0x2748b7 + _0x404124;\n// },\n// ynMVJ: function (_0x2af97e, _0x18634b) {\n// return _0x2af97e + _0x18634b;\n// },\n// OSTEc: function (_0x2b1cb6, _0x291f3b) {\n// return _0x2b1cb6 + _0x291f3b;\n// },\n// EfaoO: function (_0x385eb3, _0x344e02) {\n// return _0x385eb3(_0x344e02);\n// },\n// xNGfR: _0x351b4b(0x2d5, \"gqjc\"),\n// qbrGs: function (_0x3a56a9, _0x34d4f6) {\n// return _0x3a56a9 === _0x34d4f6;\n// },\n// wyjwU: _0x351b4b(0x2ec, \"Xq##\"),\n// miODi: _0x351b4b(0x4ba, \"cSN(\"),\n// sHnBf: _0x351b4b(0x169, \"AhM)\"),\n// };\n// try {\n// if (\n// _0x36b694[_0x351b4b(0x2be, \"lM4M\")](\n// _0x36b694[_0x351b4b(0x225, \"3r^q\")],\n// _0x36b694[_0x351b4b(0x272, \"%[Ik\")]\n// )\n// )\n// return { url: \"\" };\n// else {\n// let _0x4ba485 =\n// Config[_0x351b4b(0x435, \"o%l(\")] + _0x351b4b(0x373, \"G*8K\"),\n// _0x336625 = Math[_0x351b4b(0x501, \"biLz\")](\n// new Date()[_0x351b4b(0x185, \"hY7y\")]() / 0x3e8\n// )[_0x351b4b(0x4e5, \"n1oj\")](),\n// _0x196f42 = {\n// platform: _0x10282d[_0x351b4b(0xe0, \"obYi\")],\n// third_id: _0x10282d[_0x351b4b(0x44a, \"u*ru\")],\n// music_url: _0x10282d[_0x351b4b(0x409, \"%[Ik\")],\n// music_id: _0x10282d[_0x351b4b(0x476, \"SvDu\")],\n// };\n// (_0x196f42[_0x36b694[_0x351b4b(0x3cc, \"75HO\")]] = _0x336625),\n// (_0x196f42[_0x351b4b(0x3e8, \"C9Gu\")] = CryptoJs[\n// _0x351b4b(0x12a, \"3r^q\")\n// ](\n// _0x36b694[_0x351b4b(0x288, \"za4T\")](\n// _0x36b694[_0x351b4b(0x21b, \"[RLd\")](\n// _0x36b694[_0x351b4b(0x1dc, \"lM4M\")](\n// _0x36b694[_0x351b4b(0x317, \"hY7y\")](\n// _0x10282d[_0x351b4b(0x304, \"hEOB\")],\n// _0x36b694[_0x351b4b(0x45a, \"n1oj\")](\n// encodeURIComponent,\n// _0x10282d[_0x351b4b(0xe9, \"%!yu\")]\n// )\n// ),\n// _0x10282d[_0x351b4b(0x259, \"gqjc\")]\n// ),\n// Config[_0x351b4b(0x365, \"IZB8\")]\n// ),\n// _0x336625\n// )\n// )[_0x351b4b(0x50f, \"CC8d\")]()),\n// (0x0, axios_1[_0x351b4b(0x2eb, \"PUu(\")])({\n// method: _0x36b694[_0x351b4b(0x33b, \"^%hc\")],\n// url: _0x4ba485,\n// data: qs[_0x351b4b(0x432, \"EzBF\")](_0x196f42),\n// })[_0x351b4b(0x452, \"0fr)\")]((_0x2e3c54) => {\n// const _0x2a4a40 = _0x351b4b;\n// console[_0x2a4a40(0x1a1, \"gqjc\")](\n// _0x36b694[_0x2a4a40(0x23a, \"3r^q\")],\n// _0x2e3c54[_0x2a4a40(0x271, \"Y7Oy\")]\n// );\n// });\n// }\n// } catch (_0x5a5c37) {\n// if (\n// _0x36b694[_0x351b4b(0x390, \"gqjc\")](\n// _0x36b694[_0x351b4b(0x487, \"tq2O\")],\n// _0x36b694[_0x351b4b(0x2ce, \"UP$$\")]\n// )\n// )\n// return null;\n// else\n// console[_0x351b4b(0x2c9, \"$Sw1\")](\n// _0x36b694[_0x351b4b(0x263, \"jLvN\")],\n// _0x5a5c37\n// );\n// }\n// }\nasync function getMusicKuWoApp(musicItem, thirdItem) {\n\n let ret = { url: \"\" };\n try {\n if (thirdItem != null) {\n ret = getMusicKuWoSource(thirdItem);\n } else {\n let result1 = await getSearchKuwo(\n musicItem\n );\n if (result1) {\n let obj1 = {\n platform: 'yun',\n third_id: result1[\"id\"],\n };\n (ret = await getMusicKuWoSource(\n obj1\n ));\n }\n\n }\n } catch { }\n return ret;\n}\n\n\n\nasync function getSearchKuwo(musicItem) {\n\n let artist = musicItem.artist.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n title = musicItem.title.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n cmb = artist + \"\\x20\" + title;\n const response = (\n await (0, axios_1.default)({\n method: 'get',\n url: 'http://search.kuwo.cn/r.s',\n params: {\n client: \"kt\",\n all: cmb,\n pn: 0x0,\n rn: 0x1e,\n uid: 794762570,\n ver: 'kwplayer_ar_9.2.2.1',\n vipver: \"1\",\n show_copyright_off: 1,\n newver: 1,\n ft: 'music',\n cluster: 0,\n strategy: 2012,\n encoding: 'utf8',\n rformat: 'json',\n vermerge: 1,\n mobi: 1,\n issubtitle: 1,\n },\n })\n ).data;\n let formattedResult =\n response.abslist.map(\n formatYunMusicItem\n );\n return formattedResult.find(\n (item) =>\n item.title\n .toLowerCase()\n .replaceAll(\"\\x20\", \"\")\n .replaceAll(\"&\", \",\") == title &&\n item.artist\n .toLowerCase()\n .replaceAll(\"\\x20\", \"\")\n .replaceAll(\"&\", \",\") == artist\n );\n}\n\n// async function saveServer(musicItem, _0x27af92) {\n// const _0x28b4f5 = _0x372c47,\n// _0x32dce3 = {\n// sBjiW: function (_0x3303d0, _0x358212) {\n// return _0x3303d0 / _0x358212;\n// },\n// bcpIU: function (_0x2f2ef6, _0x668081) {\n// return _0x2f2ef6(_0x668081);\n// },\n// Gcrxm: \"sign\",\n// zooMS: function (_0x423e5b, _0x145eaa) {\n// return _0x423e5b + _0x145eaa;\n// },\n// cYiqe: \"post\",\n// };\n// try {\n// let serverUrl = \"https://adad23u.appinstall.life:2358/api/yun/send\",\n// time = Math.round(Date.now() / 1000),\n// data = {\n// platform: Config.platform,\n// third_id: musicItem.songmid,\n// title: musicItem.title,\n// artwork: musicItem.artwork,\n// artist: musicItem.artist,\n// },\n// data1 = {\n// musicInfo: encodeURIComponent(JSON.stringify(data)),\n// payInfo: encodeURIComponent(JSON.stringify(_0x27af92)),\n// time: time,\n// };\n\n// (data1.sign = CryptoJs.MD5(\n// data1.musicInfo + data1.payInfo + Config.key + time\n// ).toString()),\n// (0x0, axios_1[_0x28b4f5(0xcf, \"EryH\")])({\n// method: _0x32dce3[_0x28b4f5(0x297, \"hY7y\")],\n// url: serverUrl,\n// data: qs[_0x28b4f5(0x4e4, \"^!X0\")](data1),\n// })[_0x28b4f5(0x3fb, \"a5UL\")]((_0x757b7d) => {\n// const _0x1ca823 = _0x28b4f5;\n// console[_0x1ca823(0x33d, \"lM4M\")](\n// \"\u63d0\u4ea4\",\n// _0x757b7d[_0x1ca823(0x3fc, \"CC8d\")]\n// );\n// });\n// } catch (e) { }\n// }\n\nasync function getMusic2t58(musicItem, resultItem) {\n\n try {\n if (resultItem !== null) {\n let params = {\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded',\n Referer:\n 'http://www.2t58.com/song/' +\n resultItem.third_id +\n '.html',\n },\n },\n response = (\n await (0x0, axios_1.default)({\n method: 'post',\n url: 'http://www.2t58.com/js/play.php',\n headers: params.headers,\n data:\n 'id=' +\n resultItem.third_id +\n '&type=music',\n })\n ).data;\n\n\n return response.url != \"\"\n ? ({ url: response.url })\n : { url: \"\" }\n }\n let artist = musicItem.artist.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n title = musicItem.title.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\" \", \"\").replaceAll(\"&\", \"\"),\n enc = encodeURIComponent(artist + '\\x20' + title),\n url =\n 'http://www.2t58.com/so/' + enc + '.html',\n res = (\n await (0, axios_1.default)({\n method: 'get',\n url: url,\n timeout: 5000,\n })\n ).data;\n var reg = /href=\"\\/song\\/(.+?).html\" target=\"_mp3\">(.+?)<\\/a>/g;\n let regResult = res.matchAll(reg),\n resultArr = Array.from(regResult),\n resultArr1 = [];\n for (\n let i = 0;\n i < resultArr.length;\n i++\n ) {\n let item = resultArr[i],\n splitResult = item[2].split(\"-\"),\n singerName = splitResult[0].toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n str = \"\";\n for (\n var j = 1;\n j < splitResult.length;\n j++\n ) {\n str += splitResult[j].toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\" \", \"\").replaceAll(\"&\", \"\");\n }\n let resultItem = {\n key: item[1],\n singerName: singerName,\n songName: str,\n };\n resultArr1.push(resultItem);\n }\n let targetItem = resultArr1.find(\n (item) =>\n item.singerName == artist &&\n item.songName == title\n );\n if (targetItem) {\n let params = {\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded',\n Referer:\n 'http://www.2t58.com/song/' +\n targetItem.key +\n '.html',\n },\n },\n response = (\n await (0, axios_1.default)({\n method: 'post',\n url: 'http://www.2t58.com/js/play.php',\n headers: params.headers,\n data:\n \"id=\" +\n targetItem.key +\n '&type=music',\n })\n ).data;\n if (\n response.url !== ''\n )\n return (\n (resultItem = {\n platform: '2t58',\n third_id: targetItem.key,\n }),\n // saveServer(musicItem, resultItem),\n { url: response.url }\n );\n return { url: \"\" };\n } else return { url: \"\" };\n } catch (e) {\n console.error(e);\n return {\n url: \"\"\n }\n\n }\n}\n\n\nasync function getMusicZZ123(musicItem) {\n return {\n url: \"\"\n }\n // const _0x2a4257 = _0x372c47,\n // _0x36587e = {\n // CsBOg: function (_0x3f0149, _0x2104d9) {\n // return _0x3f0149(_0x2104d9);\n // },\n // nJdTL: function (_0x5a67bf, _0x126256) {\n // return _0x5a67bf == _0x126256;\n // },\n // nxuET: function (_0x131ceb, _0x1fcc73) {\n // return _0x131ceb / _0x1fcc73;\n // },\n // DDpnZ: function (_0x2c40b1, _0x560189) {\n // return _0x2c40b1(_0x560189);\n // },\n // sbRhb: function (_0x45f069, _0x4ba4b8) {\n // return _0x45f069(_0x4ba4b8);\n // },\n // MSQof: 'sign',\n // tfVyS: function (_0x1392e2, _0xe47d35) {\n // return _0x1392e2 + _0xe47d35;\n // },\n // zYReb: function (_0x34f4e5, _0x1d6862) {\n // return _0x34f4e5 + _0x1d6862;\n // },\n // CPFrQ: 'post',\n // syvCc: function (_0x5cd778, _0x5110d6) {\n // return _0x5cd778 != _0x5110d6;\n // },\n // mGmIM: function (_0x2136ef, _0xdc7579) {\n // return _0x2136ef === _0xdc7579;\n // },\n // VWOCG: 'SqFmM',\n // FoHeL: 'YfEid',\n // tAfzh: function (_0x97b101, _0x8a0eca) {\n // return _0x97b101 + _0x8a0eca;\n // },\n // eiZQb: 'search',\n // JDRmt: function (_0x39d41e, _0xe25663) {\n // return _0x39d41e > _0xe25663;\n // },\n // myfEd: function (_0x4d3c7a, _0x6856df) {\n // return _0x4d3c7a !== _0x6856df;\n // },\n // ogkfU: 'lwEdd',\n // QdmeR: 'songinfo',\n // YPnie: 'CeZyJ',\n // IDUmq: 'gutZH',\n // TIdRB: function (_0x2b4f83, _0xd6828b) {\n // return _0x2b4f83 === _0xd6828b;\n // },\n // eKZVG: 'alXbW'\n // };\n\n // try {\n // let artist = musicItem.artist,\n // title = musicItem.title;\n // var reg = /\\(.*?\\)/gis;\n // let matchResult = title.match(reg);\n // (matchResult !== null) &&\n // matchResult[_0x2a4257(0x2f7, \"k30p\")] > 0 &&\n // (_0x36587e[_0x2a4257(0x132, \"1]Wc\")](\n // _0x36587e[_0x2a4257(0x30a, \"AhM)\")],\n // _0x36587e[_0x2a4257(0x43f, \"UP$$\")]\n // )\n // ? _0x268250[_0x2a4257(0x146, \"Mc&5\")](\n // _0x3bc141 +\n // \"=\" +\n // _0x36587e[_0x2a4257(0x376, \"tq2O\")](\n // _0x5dea7c,\n // _0x23b218[_0x21f5b9]\n // )\n // )\n // : (title = title[_0x2a4257(0x153, \"Xq##\")](\n // matchResult[0x0],\n // \"\"\n // )));\n // (matchResult !== null) &&\n // matchResult[_0x2a4257(0x100, \"gqjc\")] > 0x0 &&\n // (title = title[_0x2a4257(0xce, \"jLvN\")](matchResult[0x0], \"\"));\n // artist = artist.replaceAll(\"/\", \",\");\n // let splitResult = artist.split(\",\"),\n // resultArr = [];\n // splitResult.forEach((item) => {\n // let name = chineseSel(item);\n // (name === \"\")\n // ? resultArr.push(item)\n // : resultArr.push(name);\n // });\n // let query = splitResult.join(\"\\x20\") + '-' + title;\n // const res = (\n // await (0, axios_1.default)({\n // method: 'post',\n // url: 'https://zz123.com/ajax/',\n // headers: ZZ123Config.headers,\n // params: {\n // act: 'search',\n // key: query,\n // page: 1,\n // },\n // })\n // ).data;\n // if (\n // _0x36587e[_0x2a4257(0xe1, \"^%hc\")](\n // res[_0x2a4257(0x312, \"C9Gu\")][_0x2a4257(0x1e3, \"3r^q\")],\n // 0x0\n // )\n // ) {\n // let _0x157928 = res[_0x2a4257(0x421, \"YiIZ\")][\n // _0x2a4257(0x174, \"0fr)\")\n // ](\n // (_0x53d159) =>\n // _0x53d159[_0x2a4257(0x4d8, \"X@&D\")] ==\n // musicItem[_0x2a4257(0x22c, \"$Sw1\")] &&\n // _0x53d159[_0x2a4257(0x202, \"xAPG\")] ==\n // musicItem[_0x2a4257(0x206, \"a5UL\")]\n // );\n // if (\n // _0x36587e[_0x2a4257(0x321, \"C9Gu\")](\n // _0x157928[_0x2a4257(0x387, \"jLvN\")],\n // 0x0\n // )\n // ) {\n // if (\n // _0x36587e[_0x2a4257(0x16b, \"%!yu\")](\n // _0x36587e[_0x2a4257(0x38b, \"DJ#n\")],\n // _0x36587e[_0x2a4257(0x38b, \"DJ#n\")]\n // )\n // ) {\n // let _0x4ad043 =\n // _0x2b76f8[_0x2a4257(0x164, \"cgFM\")] + _0x2a4257(0x34b, \"0fr)\"),\n // _0x4407be = _0x191176[_0x2a4257(0x244, \"ESa4\")](\n // _0x36587e[_0x2a4257(0x2d4, \"cgFM\")](\n // new _0x4b0b79()[_0x2a4257(0x32b, \"gqjc\")](),\n // 0x3e8\n // )\n // )[_0x2a4257(0x306, \"hEOB\")](),\n // _0x156142 = {\n // platform: _0x205835[_0x2a4257(0x1a3, \"EzBF\")],\n // third_id: _0x2648cd[_0x2a4257(0x2f8, \"a5UL\")],\n // title: _0x4772e3[_0x2a4257(0x4fd, \"*agp\")],\n // artwork: _0x51ca0f[_0x2a4257(0x310, \"tq2O\")],\n // artist: _0x26b1c4[_0x2a4257(0x471, \"cgFM\")],\n // },\n // _0x2a3dad = {\n // musicInfo: _0x36587e[_0x2a4257(0x12d, \"Mc&5\")](\n // _0x5e573d,\n // _0x4388a9[_0x2a4257(0x2da, \"k30p\")](_0x156142)\n // ),\n // payInfo: _0x36587e[_0x2a4257(0x104, \"PUu(\")](\n // _0x52b7ba,\n // _0x3817c1[_0x2a4257(0x163, \"CC8d\")](_0xe77097)\n // ),\n // time: _0x4407be,\n // };\n // (_0x2a3dad[_0x36587e[_0x2a4257(0x309, \"biLz\")]] = _0x1cc39d[\n // _0x2a4257(0x145, \"IZB8\")\n // ](\n // _0x36587e[_0x2a4257(0x1d3, \"EzBF\")](\n // _0x36587e[_0x2a4257(0x2b2, \"WSxn\")](\n // _0x2a3dad[_0x2a4257(0x176, \"mpeN\")],\n // _0x2a3dad[_0x2a4257(0x363, \"%[Ik\")]\n // ) + _0x36aa2a[_0x2a4257(0xfc, \"fm9T\")],\n // _0x4407be\n // )\n // )[_0x2a4257(0x480, \"Mc&5\")]()),\n // (0x0, _0x3bab1a[_0x2a4257(0x199, \"za4T\")])({\n // method: _0x36587e[_0x2a4257(0x3bc, \"AhM)\")],\n // url: _0x4ad043,\n // data: _0x5f49a6[_0x2a4257(0x47c, \"Mc&5\")](_0x2a3dad),\n // })[_0x2a4257(0x427, \"[RLd\")]((_0x1ac965) => {\n // const _0x284132 = _0x2a4257;\n // _0x140ae4[_0x284132(0x17c, \"G*8K\")](\n // \"\u63d0\u4ea4\",\n // _0x1ac965[_0x284132(0x35a, \"tq2O\")]\n // );\n // });\n // } else {\n // const _0x3bd1fa = (\n // await (0x0, axios_1[_0x2a4257(0x19e, \"HM9^\")])({\n // method: _0x36587e[_0x2a4257(0x385, \"%!yu\")],\n // url: _0x2a4257(0x3ee, \"fm9T\"),\n // headers: ZZ123Config[_0x2a4257(0x3a5, \"AhM)\")],\n // params: {\n // act: _0x36587e[_0x2a4257(0x4d5, \"SvDu\")],\n // id: _0x157928[0x0][\"id\"],\n // },\n // })\n // )[_0x2a4257(0x46c, \"3r^q\")];\n // if ((_0x3bd1fa[_0x2a4257(0x3c7, \"1]Wc\")] = 0xc8))\n // return {\n // url:\n // _0x2a4257(0xcc, \"IZB8\") +\n // _0x3bd1fa[_0x2a4257(0x3ce, \"HM9^\")][_0x2a4257(0x283, \"xAPG\")],\n // };\n // else {\n // if (\n // _0x36587e[_0x2a4257(0x1ba, \"n1oj\")](\n // _0x36587e[_0x2a4257(0x426, \"EzBF\")],\n // _0x36587e[_0x2a4257(0x15f, \"k%k@\")]\n // )\n // ) {\n // let _0x378b0c = [];\n // const _0x40abe8 = /[\\u4e00-\\u9fa5]/g;\n // return (\n // _0x264cad &&\n // (_0x378b0c = _0x10a46e[_0x2a4257(0x1b7, \"ESa4\")](_0x40abe8)),\n // _0x378b0c?.[_0x2a4257(0x4b6, \"75HO\")]\n // ? _0x378b0c[_0x2a4257(0x47f, \"0fr)\")](\"\")\n // : \"\"\n // );\n // } else return { url: \"\" };\n // }\n // }\n // }\n // }\n // return { url: \"\" };\n // } catch (e) {\n // console.log(e)\n // return { url: \"\" };\n // }\n}\n\n\n\nasync function getMusicMigu(musicItem) {\n let artist = musicItem.artist,\n title = musicItem.title,\n enc = encodeURIComponent(artist + \"\\x20\" + title);\n try {\n\n const headers = {\n Accept: 'application/json, text/javascript, */*; q=0.01',\n \"Accept-Encoding\": 'gzip, deflate, br',\n \"Accept-Language\": 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n Connection: 'keep-alive',\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n Host: 'm.music.migu.cn',\n Referer: 'https://m.music.migu.cn/v3/search?keyword=' + encodeURIComponent(enc),\n \"Sec-Fetch-Dest\": 'empty',\n \"Sec-Fetch-Mode\": 'cors',\n \"Sec-Fetch-Site\": 'same-origin',\n \"User-Agent\": 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',\n \"X-Requested-With\": 'XMLHttpRequest',\n },\n params = { keyword: enc, type: 2, pgc: 1, rows: 20 },\n res = await axios_1.default.get('https://m.music.migu.cn/migu/remoting/scr_search_tag', {\n headers: headers,\n params: params,\n });\n if (!res.data.musics) {\n return { url: \"\" };\n }\n let filterResult = res.data.musics.filter((_) => {\n let canPlay = _.mp3 || _.listenUrl || _.lisQq || _.lisCr;\n return (\n canPlay && _.artist === artist\n );\n });\n if (\n filterResult.length > 0\n ) {\n let first = filterResult[0],\n finalUrl = first.mp3 || first.listenUrl || first.lisQq || first.lisCr;\n return { url: finalUrl };\n }\n } catch {\n\n }\n return { url: \"\" };\n}\n\n\n\n\nasync function getMusicFangpi(musicItem, thirdItem) {\n try {\n if (thirdItem) {\n let response2 = (\n await (0x0, axios_1.default)({\n method: 'get',\n url:\n \"https://www.fangpi.net/api/play_url?id=\" +\n thirdItem.third_id +\n '&json=1',\n timeout: 5000,\n })\n ).data;\n if (\n response2.code === 1 &&\n response2.data.url &&\n response2.data.url != \"\"\n ) {\n\n return {\n url: response2.data.url,\n };\n\n }\n }\n let artist = musicItem.artist,\n title = musicItem.title;\n var reg = /\\(.*?\\)/gis;\n let matchResult = title.match(reg);\n\n matchResult != null && (\n matchResult.length > 0\n ) &&\n (title = title.replace(matchResult[0], \"\"));\n artist = artist.replaceAll(\"/\", \",\");\n let artistSplit = artist.split(\",\"),\n resultArr = [];\n artistSplit.forEach((item) => {\n let sel = chineseSel(\n item\n );\n sel === \"\"\n ? resultArr.push(item)\n : resultArr.push(sel);\n });\n let enc = encodeURIComponent(resultArr.join(\"\\x20\") +\n \"\\x20\" +\n title),\n url = 'https://www.fangpi.net/s/' + enc;\n const response = (\n await (0, axios_1.default)({\n url: url,\n method: 'get',\n timeout: 3000,\n })\n ).data;\n var reg1 = /class=\"col-5 col-content\">(.*?)<\\/a>/gis;\n let matchResult1 = response.match(reg1);\n for (const item of matchResult1) {\n let idx = _(\n item.indexOf(\n '/music/'\n ) +\n 7\n ),\n substrItem = item.substring(idx);\n idx = substrItem.indexOf(\"\\x22\");\n let str2 = substrItem.substring(0, idx),\n response2 = (\n await (0, axios_1.default)({\n method: 'get',\n url:\n 'https://www.fangpi.net/api/play_url?id=' + str2 + '&json=1',\n timeout: 5000,\n })\n ).data;\n if (\n response2.code === 1 &&\n response2.data.url &&\n response2.data.url != \"\"\n ) {\n return (\n (thirdItem = {\n platform: 'fangpi',\n third_id: str2,\n }),\n // _0x43e8cc[_0x12b518(0x27e, \"mpeN\")](\n // saveServer,\n // musicItem,\n // thirdItem\n // ),\n {\n url: response2.data.url,\n }\n );\n }\n\n }\n return { url: \"\" };\n } catch {\n return { url: \"\" };\n }\n}\n\n\n\nasync function getMusicSource(musicItem, quality) {\n try {\n if (musicItem.isfree) {\n let source = await getMusicQQ(musicItem, quality);\n if (source) {\n return source;\n }\n }\n let obj = { url: \"\" },\n api = Config.server + \"/api/yun\",\n time = Math.round(Date.now() / 1000).toString(),\n params = {\n platform: Config.platform,\n third_id: musicItem.songmid,\n time: time,\n };\n params.sign = CryptoJs.MD5(params.third_id + Config.key + +time).toString();\n let res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: api,\n data: qs.stringify(params),\n })\n ).data;\n if (res.code !== 1 && res.data.length > 0) {\n let results = res.data;\n for (var result of results) {\n\n if (\n result.platform == 'yun'\n )\n obj = (obj.url === \"\")\n ? await getMusicKuWoApp(\n musicItem,\n result\n )\n : obj;\n else {\n if (\n result.platform === '2t58'\n )\n obj =\n obj.url == \"\"\n ? await getMusic2t58(musicItem, result)\n : obj;\n else if (result.platform === 'fangpi') {\n obj = (obj.url === \"\"\n ? await getMusicFangpi(musicItem, result)\n : obj);\n }\n }\n }\n }\n\n\n return (\n (obj = obj.url === \"\"\n ? await getMusicKuWoApp(\n musicItem,\n null\n )\n : obj),\n (obj = obj.url === \"\"\n ? await getMusic2t58(\n musicItem,\n null\n )\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicZZ123(musicItem)\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicMigu(musicItem)\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicFangpi(\n musicItem,\n null\n )\n : obj),\n obj &&\n obj.url.indexOf(\n 'http'\n ) == -1 && (obj.url = \"\"),\n obj\n );\n } catch (e) {\n // log\n console.log(e)\n }\n}\n\n\n\nasync function getMusicQQ(musicItem, quality) {\n\n let domain = \"\",\n purl = \"\",\n type = '128';\n if (quality === 'standard')\n type = '320';\n else {\n if (\n quality === 'high'\n ) {\n type = 'm4a';\n }\n\n else\n (quality === 'super') && (type = 'flac');\n }\n const result = await getSourceUrl(musicItem.songmid, type);\n\n if (result.req_0 && result.req_0.data && result.req_0.data.midurlinfo) {\n purl = result.req_0.data.midurlinfo[0].purl;\n }\n if (!purl) {\n return null;\n }\n if (domain === \"\") {\n domain =\n result.req_0.data.sip.find((i) => !i.startsWith(\"http://ws\")) ||\n result.req_0.data.sip[0];\n }\n return {\n url: `${domain}${purl}`,\n };\n}\n\n\nmodule.exports = {\n platform: \"QQ\u97f3\u4e50\",\n version: \"0.2.5\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n srcUrl: \"https://gitee.com/maotoumao/plugins-list1/raw/master/qq.js\",\n primaryKey: [\"id\", \"songmid\"],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"artist\") {\n return await searchArtist(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n } else if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n return await getMusicSource(musicItem, quality);\n },\n getLyric: getLyric,\n getAlbumInfo: getAlbumInfo,\n getArtistWorks: getArtistWorks,\n importMusicSheet: importMusicSheet,\n getTopLists: getTopLists,\n getTopListDetail: getTopListDetail,\n getRecommendSheetTags: getRecommendSheetTags,\n getRecommendSheetsByTag: getRecommendSheetsByTag,\n getMusicSheetInfo: getMusicSheetInfo,\n};", "id": "msg_1789568589088"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ音乐 (非VIP), error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568589088: True [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ音乐 (非VIP) [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1789568589.0882366, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'status': 'loaded', 'load_time': 1789568589.3907213, 'enabled': True}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:2719: Reloading all plugins... [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:916: Plugins directory: conf/js_plugins [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:917: Plugins config file: conf/plugins-config.json [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: Audiomack [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:23:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "Audiomack", "code": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst axios_1 = require(\"axios\");\nconst cheerio_1 = require(\"cheerio\");\nconst CryptoJS = require(\"crypto-js\");\nconst dayjs = require(\"dayjs\");\nconst pageSize = 20;\nconst headers = {\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36\",\n};\nfunction nonce(e = 10) {\n let n = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\", r = \"\";\n for (let i = 0; i < e; i++)\n r += n.charAt(Math.floor(Math.random() * n.length));\n return r;\n}\nfunction getNormalizedParams(parameters) {\n const sortedKeys = [];\n const normalizedParameters = [];\n for (let e in parameters) {\n sortedKeys.push(_encode(e));\n }\n sortedKeys.sort();\n for (let idx = 0; idx < sortedKeys.length; idx++) {\n const e = sortedKeys[idx];\n var n, r, i = _decode(e), a = parameters[i];\n for (a.sort(), n = 0; n < a.length; n++)\n (r = _encode(a[n])), normalizedParameters.push(e + \"=\" + r);\n }\n return normalizedParameters.join(\"&\");\n}\nfunction _encode(e) {\n return e\n ? encodeURIComponent(e)\n .replace(/[!'()]/g, escape)\n .replace(/\\*/g, \"%2A\")\n : \"\";\n}\nfunction _decode(e) {\n return e ? decodeURIComponent(e) : \"\";\n}\nfunction u(e) {\n (this._parameters = {}), this._loadParameters(e || {});\n}\nu.prototype = {\n _loadParameters: function (e) {\n e instanceof Array\n ? this._loadParametersFromArray(e)\n : \"object\" == typeof e && this._loadParametersFromObject(e);\n },\n _loadParametersFromArray: function (e) {\n var n;\n for (n = 0; n < e.length; n++)\n this._loadParametersFromObject(e[n]);\n },\n _loadParametersFromObject: function (e) {\n var n;\n for (n in e)\n if (e.hasOwnProperty(n)) {\n var r = this._getStringFromParameter(e[n]);\n this._loadParameterValue(n, r);\n }\n },\n _loadParameterValue: function (e, n) {\n var r;\n if (n instanceof Array) {\n for (r = 0; r < n.length; r++) {\n var i = this._getStringFromParameter(n[r]);\n this._addParameter(e, i);\n }\n 0 == n.length && this._addParameter(e, \"\");\n }\n else\n this._addParameter(e, n);\n },\n _getStringFromParameter: function (e) {\n var n = e || \"\";\n try {\n (\"number\" == typeof e || \"boolean\" == typeof e) && (n = e.toString());\n }\n catch (e) { }\n return n;\n },\n _addParameter: function (e, n) {\n this._parameters[e] || (this._parameters[e] = []),\n this._parameters[e].push(n);\n },\n get: function () {\n return this._parameters;\n },\n};\nfunction getSignature(method, urlPath, params, secret = \"f3ac5b086f3eab260520d8e3049561e6\") {\n urlPath = urlPath.split(\"?\")[0];\n urlPath = urlPath.startsWith(\"http\")\n ? urlPath\n : \"https://api.audiomack.com/v1\" + urlPath;\n const r = new u(params).get();\n const httpMethod = method.toUpperCase();\n const normdParams = getNormalizedParams(r);\n const l = _encode(httpMethod) + \"&\" + _encode(urlPath) + \"&\" + _encode(normdParams);\n const hash = CryptoJS.HmacSHA1(l, secret + \"&\").toString(CryptoJS.enc.Base64);\n return hash;\n}\nfunction formatMusicItem(raw) {\n return {\n id: raw.id,\n artwork: raw.image || raw.image_base,\n duration: +raw.duration,\n title: raw.title,\n artist: raw.artist,\n album: raw.album,\n url_slug: raw.url_slug,\n };\n}\nfunction formatAlbumItem(raw) {\n var _a, _b;\n return {\n artist: raw.artist,\n artwork: raw.image || raw.image_base,\n id: raw.id,\n date: dayjs.unix(+raw.released).format(\"YYYY-MM-DD\"),\n title: raw.title,\n _musicList: (_b = (_a = raw === null || raw === void 0 ? void 0 : raw.tracks) === null || _a === void 0 ? void 0 : _a.map) === null || _b === void 0 ? void 0 : _b.call(_a, (it) => ({\n id: it.song_id || it.id,\n artwork: raw.image || raw.image_base,\n duration: +it.duration,\n title: it.title,\n artist: it.artist,\n album: raw.title,\n })),\n };\n}\nfunction formatMusicSheetItem(raw) {\n var _a, _b, _c, _d, _e, _f;\n return {\n worksNum: raw.track_count,\n id: raw.id,\n title: raw.title,\n artist: (_a = raw.artist) === null || _a === void 0 ? void 0 : _a.name,\n artwork: raw.image || raw.image_base,\n artistItem: {\n id: (_b = raw.artist) === null || _b === void 0 ? void 0 : _b.id,\n avatar: ((_c = raw.artist) === null || _c === void 0 ? void 0 : _c.image) || ((_d = raw.artist) === null || _d === void 0 ? void 0 : _d.image_base),\n name: (_e = raw.artist) === null || _e === void 0 ? void 0 : _e.name,\n url_slug: (_f = raw.artist) === null || _f === void 0 ? void 0 : _f.url_slug,\n },\n createAt: dayjs.unix(+raw.created).format(\"YYYY-MM-DD\"),\n url_slug: raw.url_slug,\n };\n}\nasync function searchBase(query, page, show) {\n const params = {\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n q: query,\n show: show,\n sort: \"popular\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return results;\n}\nasync function searchMusic(query, page) {\n const results = await searchBase(query, page, \"songs\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const results = await searchBase(query, page, \"albums\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const results = await searchBase(query, page, \"playlists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function searchArtist(query, page) {\n const results = await searchBase(query, page, \"artists\");\n return {\n isEnd: results.length < pageSize,\n data: results.map((raw) => ({\n name: raw.name,\n id: raw.id,\n avatar: raw.image || raw.image_base,\n url_slug: raw.url_slug,\n })),\n };\n}\nlet dataUrlBase;\nasync function getDataUrlBase() {\n if (dataUrlBase) {\n return dataUrlBase;\n }\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n if (jsonObj.buildId) {\n dataUrlBase = `https://audiomack.com/_next/data/${jsonObj.buildId}`;\n }\n return dataUrlBase;\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"songs\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicItem),\n };\n }\n else if (type === \"album\") {\n const params = {\n artist_id: artistItem.id,\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n sort: \"rank\",\n type: \"albums\",\n };\n const oauth_signature = getSignature(\"GET\", \"/search_artist_content\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/search_artist_content\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatAlbumItem),\n };\n }\n}\nasync function getMusicSheetInfo(sheet, page) {\n const _dataUrlBase = await getDataUrlBase();\n const res = (await axios_1.default.get(`${_dataUrlBase}/${sheet.artistItem.url_slug}/playlist/${sheet.url_slug}.json`, {\n params: {\n page_slug: sheet.artistItem.url_slug,\n playlist_slug: sheet.url_slug,\n },\n headers: Object.assign({}, headers),\n })).data;\n const musicPage = res.pageProps.initialState.musicPage;\n const targetKey = Object.keys(musicPage).find((it) => it.startsWith(\"musicMusicPage\"));\n const tracks = musicPage[targetKey].results.tracks;\n return {\n isEnd: true,\n musicList: tracks.map(formatMusicItem),\n };\n}\nasync function getMediaSource(musicItem, quality) {\n if (quality !== \"standard\") {\n return;\n }\n const params = {\n environment: \"desktop-web\",\n hq: true,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n section: \"/search\",\n };\n const oauth_signature = getSignature(\"GET\", `/music/play/${musicItem.id}`, params);\n const res = (await axios_1.default.get(`https://api.audiomack.com/v1/music/play/${musicItem.id}`, {\n headers: Object.assign(Object.assign({}, headers), { origin: \"https://audiomack.com\" }),\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data;\n return {\n url: res.signedUrl,\n };\n}\nasync function getAlbumInfo(albumItem) {\n return {\n musicList: albumItem._musicList.map((it) => (Object.assign({}, it))),\n };\n}\nasync function getRecommendSheetTags() {\n const rawHtml = (await axios_1.default.get(\"https://audiomack.com/playlists\")).data;\n const $ = (0, cheerio_1.load)(rawHtml);\n const script = $(\"script#__NEXT_DATA__\").text();\n const jsonObj = JSON.parse(script);\n return {\n data: [\n {\n data: jsonObj.props.pageProps.categories,\n },\n ],\n };\n}\nasync function getRecommendSheetsByTag(tag, page) {\n if (!tag.id) {\n tag = { id: \"34\", title: \"What's New\", url_slug: \"whats-new\" };\n }\n const params = {\n featured: \"yes\",\n limit: pageSize,\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n page: page,\n slug: tag.url_slug,\n };\n const oauth_signature = getSignature(\"GET\", \"/playlist/categories\", params);\n const results = (await axios_1.default.get(\"https://api.audiomack.com/v1/playlist/categories\", {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results.playlists;\n return {\n isEnd: results.length < pageSize,\n data: results.map(formatMusicSheetItem),\n };\n}\nasync function getTopLists() {\n const genres = [\n {\n title: \"All Genres\",\n url_slug: null,\n },\n {\n title: \"Afrosounds\",\n url_slug: \"afrobeats\",\n },\n {\n title: \"Hip-Hop/Rap\",\n url_slug: \"rap\",\n },\n {\n title: \"Latin\",\n url_slug: \"latin\",\n },\n {\n title: \"Caribbean\",\n url_slug: \"caribbean\",\n },\n {\n title: \"Pop\",\n url_slug: \"pop\",\n },\n {\n title: \"R&B\",\n url_slug: \"rb\",\n },\n {\n title: \"Gospel\",\n url_slug: \"gospel\",\n },\n {\n title: \"Electronic\",\n url_slug: \"electronic\",\n },\n {\n title: \"Rock\",\n url_slug: \"rock\",\n },\n {\n title: \"Punjabi\",\n url_slug: \"punjabi\",\n },\n {\n title: \"Country\",\n url_slug: \"country\",\n },\n {\n title: \"Instrumental\",\n url_slug: \"instrumental\",\n },\n {\n title: \"Podcast\",\n url_slug: \"podcast\",\n },\n ];\n return [\n {\n title: \"Trending Songs\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"trending\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n {\n title: \"Recently Added Music\",\n data: genres.map((it) => {\n var _a;\n return (Object.assign(Object.assign({}, it), { type: \"recent\", id: (_a = it.url_slug) !== null && _a !== void 0 ? _a : it.title }));\n }),\n },\n ];\n}\nasync function getTopListDetail(topListItem, page = 1) {\n const type = topListItem.type;\n const partialUrl = `/music/${topListItem.url_slug ? `${topListItem.url_slug}/` : \"\"}${type}/page/${page}`;\n const url = `https://api.audiomack.com/v1${partialUrl}`;\n const params = {\n oauth_consumer_key: \"audiomack-js\",\n oauth_nonce: nonce(32),\n oauth_signature_method: \"HMAC-SHA1\",\n oauth_timestamp: Math.round(Date.now() / 1e3),\n oauth_version: \"1.0\",\n type: \"song\",\n };\n const oauth_signature = getSignature(\"GET\", partialUrl, params);\n const results = (await axios_1.default.get(url, {\n headers,\n params: Object.assign(Object.assign({}, params), { oauth_signature }),\n })).data.results;\n return {\n musicList: results.map(formatMusicItem),\n };\n}\nmodule.exports = {\n platform: \"Audiomack\",\n version: \"0.0.2\",\n author: '\u732b\u5934\u732b',\n primaryKey: [\"id\", \"url_slug\"],\n srcUrl: \"https://gitee.com/maotoumao/MusicFreePlugins/raw/v0.1/dist/audiomack/index.js\",\n cacheControl: \"no-cache\",\n supportedSearchType: ['music', 'album', 'sheet', 'artist'],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n }\n else if (type === \"album\") {\n return await searchAlbum(query, page);\n }\n else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n }\n else if (type === \"artist\") {\n return await searchArtist(query, page);\n }\n },\n getMediaSource,\n getAlbumInfo,\n getMusicSheetInfo,\n getArtistWorks,\n getRecommendSheetTags,\n getRecommendSheetsByTag,\n getTopLists,\n getTopListDetail,\n};", "id": "msg_1789568589641"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: Audiomack, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568589641: True [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: Audiomack [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:929: Loading plugin: QQ音乐 (非VIP) [2026-09-16 22:23:09] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: load for plugin: unknown [2026-09-16 22:23:09] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "load", "name": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "code": "const axios_1 = require(\"axios\"),\n CryptoJs = require(\"crypto-js\"),\n he_1 = require(\"he\"),\n qs = require(\"qs\");\n\nlet Config = {\n server: \"https://adad23u.appinstall.life:2358\",\n platform: \"QQ\u97f3\u4e50\",\n key: \"88452cf25c1ca5b\",\n};\n\nlet ZZ123Config = {\n headers: {\n \"Content-Type\": \"application/json\",\n Referer: \"https://zz123.com/\",\n \"User-Agent\":\n \"MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1\",\n },\n};\n\nconst pageSize = 20;\n\nfunction formatYunMusicItem(musicItem) {\n return {\n id: musicItem.MUSICRID.replace(\n 'MUSIC_',\n \"\"\n ),\n title: (0, he_1.decode)(\n musicItem.NAME || \"\"\n ),\n artist: (0, he_1.decode)(\n musicItem.ARTIST || \"\"\n ),\n isfree:\n musicItem?.payInfo?.listen_fragment !== \"1\",\n };\n}\n\nfunction formatMusicItem(musicItem) {\n var _a, _b, _c;\n const albumid =\n musicItem.albumid ||\n ((_a = musicItem.album) === null || _a === void 0 ? void 0 : _a.id);\n const albummid =\n musicItem.albummid ||\n ((_b = musicItem.album) === null || _b === void 0 ? void 0 : _b.mid);\n const albumname =\n musicItem.albumname ||\n ((_c = musicItem.album) === null || _c === void 0 ? void 0 : _c.title);\n return {\n id: musicItem.id || musicItem.songid,\n songmid: musicItem.mid || musicItem.songmid,\n title: musicItem.title || musicItem.songname,\n artist: musicItem.singer?.map((s) => s.name)?.join(\", \"),\n artwork: albummid\n ? `https://y.gtimg.cn/music/photo_new/T002R300x300M000${albummid}.jpg`\n : undefined,\n album: albumname,\n lrc: musicItem.lyric || undefined,\n albumid: albumid,\n albummid: albummid,\n isfree: musicItem.pay.pay_play === 0 || musicItem.pay.payplay === 0,\n };\n}\n\nconst chineseSel = (item) => {\n let res = [];\n const reg = /[\\u4e00-\\u9fa5]/g;\n return item && (res = item.match(reg)), res?.length ? res.join(\"\") : \"\";\n};\n\nfunction formatAlbumItem(_) {\n return {\n id: _.albumID || _.albumid,\n albumMID: _.albumMID || _.album_mid,\n title: _.albumName || _.album_name,\n artwork:\n _.albumPic ||\n `https://y.gtimg.cn/music/photo_new/T002R300x300M000${_.albumMID || _.album_mid\n }.jpg`,\n date: _.publicTime || _.pub_time,\n singerID: _.singerID || _.singer_id,\n artist: _.singerName || _.singer_name,\n singerMID: _.singerMID || _.singer_mid,\n description: _.desc,\n };\n}\nfunction formatArtistItem(_) {\n return {\n name: _.singerName,\n id: _.singerID,\n singerMID: _.singerMID,\n avatar: _.singerPic,\n worksNum: _.songNum,\n };\n}\n\nconst searchTypeMap = {\n 0: \"song\",\n 2: \"album\",\n 1: \"singer\",\n 3: \"songlist\",\n 7: \"song\",\n 12: \"mv\",\n};\n\nconst headers = {\n referer: \"https://y.qq.com\",\n \"user-agent\":\n \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36\",\n Cookie: \"uin=\",\n};\n\nconst validSongFilter = () => {\n return true;\n};\n\nasync function searchBase(query, page, type) {\n const res = (\n await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg\",\n method: \"POST\",\n data: {\n req_1: {\n method: \"DoSearchForQQMusicDesktop\",\n module: \"music.search.SearchCgiService\",\n param: {\n num_per_page: pageSize,\n page_num: page,\n query: query,\n search_type: type,\n },\n },\n },\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.req_1.data.meta.sum <= page * pageSize,\n data: res.req_1.data.body[searchTypeMap[type]].list,\n };\n}\n\nasync function searchMusic(query, page) {\n const songs = await searchBase(query, page, 0);\n return {\n isEnd: songs.isEnd,\n data: songs.data.filter(validSongFilter).map(formatMusicItem),\n };\n}\nasync function searchAlbum(query, page) {\n const albums = await searchBase(query, page, 2);\n return {\n isEnd: albums.isEnd,\n data: albums.data.map(formatAlbumItem),\n };\n}\nasync function searchArtist(query, page) {\n const artists = await searchBase(query, page, 1);\n return {\n isEnd: artists.isEnd,\n data: artists.data.map(formatArtistItem),\n };\n}\nasync function searchMusicSheet(query, page) {\n const musicSheet = await searchBase(query, page, 3);\n return {\n isEnd: musicSheet.isEnd,\n data: musicSheet.data.map((item) => ({\n title: item.dissname,\n createAt: item.createtime,\n description: item.introduction,\n playCount: item.listennum,\n worksNums: item.song_count,\n artwork: item.imgurl,\n id: item.dissid,\n artist: item.creator.name,\n })),\n };\n}\n\nasync function searchLyric(query, page) {\n const songs = await searchBase(query, page, 7);\n return {\n isEnd: songs.isEnd,\n data: songs.data.map((it) =>\n Object.assign(Object.assign({}, formatMusicItem(it)), {\n rawLrcTxt: it.content,\n })\n ),\n };\n}\n\nfunction getQueryFromUrl(key, search) {\n try {\n const sArr = search.split(\"?\");\n let s = \"\";\n if (sArr.length > 1) {\n s = sArr[1];\n } else {\n return key ? undefined : {};\n }\n const querys = s.split(\"&\");\n const result = {};\n querys.forEach((item) => {\n const temp = item.split(\"=\");\n result[temp[0]] = decodeURIComponent(temp[1]);\n });\n return key ? result[key] : result;\n } catch (err) {\n return key ? \"\" : {};\n }\n}\nfunction changeUrlQuery(obj, baseUrl) {\n const query = getQueryFromUrl(null, baseUrl);\n let url = baseUrl.split(\"?\")[0];\n const newQuery = Object.assign(Object.assign({}, query), obj);\n let queryArr = [];\n Object.keys(newQuery).forEach((key) => {\n if (newQuery[key] !== undefined && newQuery[key] !== \"\") {\n queryArr.push(`${key}=${encodeURIComponent(newQuery[key])}`);\n }\n });\n return `${url}?${queryArr.join(\"&\")}`.replace(/\\?$/, \"\");\n}\nconst typeMap = {\n 128: { s: \"M500\", e: \".mp3\" },\n 320: { s: \"M800\", e: \".mp3\" },\n m4a: { s: \"C400\", e: \".m4a\" },\n ape: { s: \"A000\", e: \".ape\" },\n flac: { s: \"F000\", e: \".flac\" },\n};\n\nasync function getSourceUrl(id, type = \"128\") {\n const mediaId = id;\n let uin = \"\";\n const guid = (Math.random() * 10000000).toFixed(0);\n const typeObj = typeMap[type];\n const file = `${typeObj.s}${id}${mediaId}${typeObj.e}`;\n const url = changeUrlQuery({\n \"-\": \"getplaysongvkey\",\n g_tk: 5381,\n loginUin: uin,\n hostUin: 0,\n format: \"json\",\n inCharset: \"utf8\",\n outCharset: \"utf-8\u00acice=0\",\n platform: \"yqq.json\",\n needNewCode: 0,\n data: JSON.stringify({\n req_0: {\n module: \"vkey.GetVkeyServer\",\n method: \"CgiGetVkey\",\n param: {\n filename: [file],\n guid: guid,\n songmid: [id],\n songtype: [0],\n uin: uin,\n loginflag: 1,\n platform: \"20\",\n },\n },\n comm: {\n uin: uin,\n format: \"json\",\n ct: 19,\n cv: 0,\n authst: \"\",\n },\n }),\n }, \"https://u.y.qq.com/cgi-bin/musicu.fcg\");\n return (await (0, axios_1.default)({\n method: \"GET\",\n url: url,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })).data;\n}\nasync function getAlbumInfo(albumItem) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 10000,\n },\n albumSonglist: {\n method: \"GetAlbumSongList\",\n param: {\n albumMid: albumItem.albumMID,\n albumID: 0,\n begin: 0,\n num: 999,\n order: 2,\n },\n module: \"music.musichallAlbum.AlbumSongList\",\n },\n }),\n },\n \"https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&format=json&inCharset=utf8&outCharset=utf-8\"\n );\n const res = (\n await (0, axios_1.default)({\n url: url,\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n musicList: res.albumSonglist.data.songList\n .filter((_) => validSongFilter(_.songInfo))\n .map((item) => {\n const _ = item.songInfo;\n return formatMusicItem(_);\n }),\n };\n}\nasync function getArtistSongs(artistItem, page) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singer: {\n method: \"get_singer_detail_info\",\n param: {\n sort: 5,\n singermid: artistItem.singerMID,\n sin: (page - 1) * pageSize,\n num: pageSize,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n },\n \"http://u.y.qq.com/cgi-bin/musicu.fcg\"\n );\n const res = (\n await (0, axios_1.default)({\n url: url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.singer.data.total_song <= page * pageSize,\n data: res.singer.data.songlist.filter(validSongFilter).map(formatMusicItem),\n };\n}\nasync function getArtistAlbums(artistItem, page) {\n const url = changeUrlQuery(\n {\n data: JSON.stringify({\n comm: {\n ct: 24,\n cv: 0,\n },\n singerAlbum: {\n method: \"get_singer_album\",\n param: {\n singermid: artistItem.singerMID,\n order: \"time\",\n begin: (page - 1) * pageSize,\n num: pageSize / 1,\n exstatus: 1,\n },\n module: \"music.web_singer_info_svr\",\n },\n }),\n },\n \"http://u.y.qq.com/cgi-bin/musicu.fcg\"\n );\n const res = (\n await (0, axios_1.default)({\n url,\n method: \"get\",\n headers: headers,\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n return {\n isEnd: res.singerAlbum.data.total <= page * pageSize,\n data: res.singerAlbum.data.list.map(formatAlbumItem),\n };\n}\nasync function getArtistWorks(artistItem, page, type) {\n if (type === \"music\") {\n return getArtistSongs(artistItem, page);\n }\n if (type === \"album\") {\n return getArtistAlbums(artistItem, page);\n }\n}\nasync function getLyric(musicItem) {\n const result = (\n await (0, axios_1.default)({\n url: `http://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?songmid=${musicItem.songmid\n }&pcachetime=${new Date().getTime()}&g_tk=5381&loginUin=0&hostUin=0&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0`,\n headers: { Referer: \"https://y.qq.com\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const res = JSON.parse(\n result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n );\n let translation;\n if (res.trans) {\n translation = he.decode(\n CryptoJs.enc.Base64.parse(res.trans).toString(CryptoJs.enc.Utf8)\n );\n }\n return {\n rawLrc: he.decode(\n CryptoJs.enc.Base64.parse(res.lyric).toString(CryptoJs.enc.Utf8)\n ),\n translation,\n };\n}\n\nasync function importMusicSheet(urlLike) {\n let id;\n if (!id) {\n id = (urlLike.match(\n /https?:\\/\\/i\\.y\\.qq\\.com\\/n2\\/m\\/share\\/details\\/taoge\\.html\\?.*id=([0-9]+)/\n ) || [])[1];\n }\n if (!id) {\n id = (urlLike.match(/https?:\\/\\/y\\.qq\\.com\\/n\\/ryqq\\/playlist\\/([0-9]+)/) ||\n [])[1];\n }\n if (!id) {\n id = (urlLike.match(/^(\\d+)$/) || [])[1];\n }\n if (!id) {\n return;\n }\n const result = (\n await (0, axios_1.default)({\n url: `http://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&utf8=1&disstid=${id}&loginUin=0`,\n headers: { Referer: \"https://y.qq.com/n/yqq/playlist\", Cookie: \"uin=\" },\n method: \"get\",\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n })\n ).data;\n const res = JSON.parse(\n result.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n );\n return res.cdlist[0].songlist.filter(validSongFilter).map(formatMusicItem);\n}\nasync function getTopLists() {\n const list = await (0, axios_1.default)({\n url: \"https://u.y.qq.com/cgi-bin/musicu.fcg?_=1577086820633&data=%7B%22comm%22%3A%7B%22g_tk%22%3A5381%2C%22uin%22%3A123456%2C%22format%22%3A%22json%22%2C%22inCharset%22%3A%22utf-8%22%2C%22outCharset%22%3A%22utf-8%22%2C%22notice%22%3A0%2C%22platform%22%3A%22h5%22%2C%22needNewCode%22%3A1%2C%22ct%22%3A23%2C%22cv%22%3A0%7D%2C%22topList%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetAll%22%2C%22param%22%3A%7B%7D%7D%7D\",\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return list.data.topList.data.group.map((e) => ({\n title: e.groupName,\n data: e.toplist.map((_) => ({\n id: _.topId,\n description: _.intro,\n title: _.title,\n period: _.period,\n coverImg: _.headPicUrl || _.frontPicUrl,\n })),\n }));\n}\nasync function getTopListDetail(topListItem) {\n var _a;\n const res = await (0, axios_1.default)({\n url: `https://u.y.qq.com/cgi-bin/musicu.fcg?g_tk=5381&data=%7B%22detail%22%3A%7B%22module%22%3A%22musicToplist.ToplistInfoServer%22%2C%22method%22%3A%22GetDetail%22%2C%22param%22%3A%7B%22topId%22%3A${topListItem.id\n }%2C%22offset%22%3A0%2C%22num%22%3A100%2C%22period%22%3A%22${(_a = topListItem.period) !== null && _a !== void 0 ? _a : \"\"\n }%22%7D%7D%2C%22comm%22%3A%7B%22ct%22%3A24%2C%22cv%22%3A0%7D%7D`,\n method: \"get\",\n headers: {\n Cookie: \"uin=\",\n },\n xsrfCookieName: \"XSRF-TOKEN\",\n withCredentials: true,\n });\n return Object.assign(Object.assign({}, topListItem), {\n musicList: res.data.detail.data.songInfoList\n .filter(validSongFilter)\n .map(formatMusicItem),\n });\n}\nasync function getRecommendSheetTags() {\n const res = (\n await axios_1.default.get(\n \"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_tag_conf.fcg?format=json&inCharset=utf8&outCharset=utf-8\",\n {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n }\n )\n ).data.data.categories;\n const data = res.slice(1).map((_) => ({\n title: _.categoryGroupName,\n data: _.items.map((tag) => ({\n id: tag.categoryId,\n title: tag.categoryName,\n })),\n }));\n const pinned = [];\n for (let d of data) {\n if (d.data.length) {\n pinned.push(d.data[0]);\n }\n }\n return {\n pinned,\n data,\n };\n}\n\n\nasync function getRecommendSheetsByTag(tag, page) {\n const pageSize = 20;\n const rawRes = (\n await axios_1.default.get(\n \"https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg\",\n {\n headers: {\n referer: \"https://y.qq.com/\",\n },\n params: {\n inCharset: \"utf8\",\n outCharset: \"utf-8\",\n sortId: 5,\n categoryId:\n (tag === null || tag === void 0 ? void 0 : tag.id) || \"10000000\",\n sin: pageSize * (page - 1),\n ein: page * pageSize - 1,\n },\n }\n )\n ).data;\n const res = JSON.parse(\n rawRes.replace(/callback\\(|MusicJsonCallback\\(|jsonCallback\\(|\\)$/g, \"\")\n ).data;\n const isEnd = res.sum <= page * pageSize;\n const data = res.list.map((item) => {\n var _a, _b;\n return {\n id: item.dissid,\n createTime: item.createTime,\n title: item.dissname,\n artwork: item.imgurl,\n description: item.introduction,\n playCount: item.listennum,\n artist:\n (_b =\n (_a = item.creator) === null || _a === void 0 ? void 0 : _a.name) !==\n null && _b !== void 0\n ? _b\n : \"\",\n };\n });\n return {\n isEnd,\n data,\n };\n}\nasync function getMusicSheetInfo(sheet, page) {\n const data = await importMusicSheet(sheet.id);\n return {\n isEnd: true,\n musicList: data,\n };\n}\nasync function getMusicKuWoSource(musicItem) {\n try {\n\n let time = Math.round(Date.now() / 1e3).toString(),\n keyStr = '88452cf25c1ca5b',\n hash = CryptoJs.MD5(\n musicItem.third_id + keyStr + time\n );\n const url =\n 'https://sfuuc53rd.appinstall.life:8022/music/yun.php?flag=' +\n hash +\n 'id=' +\n musicItem.third_id +\n '&tm=' +\n time,\n res = (\n await axios_1.default.get(\n url\n )\n ).data;\n if (\n res.url !== \"\"\n ) {\n let params = {\n headers: {\n \"Content-Type\": 'application/json',\n Host: 'nmobi.kuwo.cn',\n Referer: 'https://www.kuwo.cn/search/list?key=',\n },\n },\n res1 = (\n await axios_1.default.get(\n res.url,\n params\n )\n ).data,\n spIdx = res1.indexOf(\n 'url='\n ),\n str2 = res1.substring(spIdx),\n idx2 = str2.indexOf(\"\\x0d\\x0a\");\n return (\n (str2 = str2.substring(4, idx2)),\n { url: str2 }\n );\n }\n\n } catch {\n\n }\n return { url: \"\" };\n}\n// async function viewLog(_0x10282d) {\n// const _0x351b4b = _0x372c47,\n// _0x36b694 = {\n// GJaOu: _0x351b4b(0x1a4, \"G*8K\"),\n// NPJtT: function (_0x196b96, _0xa18d55) {\n// return _0x196b96 === _0xa18d55;\n// },\n// shYmt: _0x351b4b(0x437, \"1]Wc\"),\n// ZRBpe: _0x351b4b(0x1d6, \"ESa4\"),\n// HYxjW: _0x351b4b(0x26f, \"gqjc\"),\n// AoPpm: function (_0x28f3fd, _0xe56bbe) {\n// return _0x28f3fd + _0xe56bbe;\n// },\n// tDOFe: function (_0x2748b7, _0x404124) {\n// return _0x2748b7 + _0x404124;\n// },\n// ynMVJ: function (_0x2af97e, _0x18634b) {\n// return _0x2af97e + _0x18634b;\n// },\n// OSTEc: function (_0x2b1cb6, _0x291f3b) {\n// return _0x2b1cb6 + _0x291f3b;\n// },\n// EfaoO: function (_0x385eb3, _0x344e02) {\n// return _0x385eb3(_0x344e02);\n// },\n// xNGfR: _0x351b4b(0x2d5, \"gqjc\"),\n// qbrGs: function (_0x3a56a9, _0x34d4f6) {\n// return _0x3a56a9 === _0x34d4f6;\n// },\n// wyjwU: _0x351b4b(0x2ec, \"Xq##\"),\n// miODi: _0x351b4b(0x4ba, \"cSN(\"),\n// sHnBf: _0x351b4b(0x169, \"AhM)\"),\n// };\n// try {\n// if (\n// _0x36b694[_0x351b4b(0x2be, \"lM4M\")](\n// _0x36b694[_0x351b4b(0x225, \"3r^q\")],\n// _0x36b694[_0x351b4b(0x272, \"%[Ik\")]\n// )\n// )\n// return { url: \"\" };\n// else {\n// let _0x4ba485 =\n// Config[_0x351b4b(0x435, \"o%l(\")] + _0x351b4b(0x373, \"G*8K\"),\n// _0x336625 = Math[_0x351b4b(0x501, \"biLz\")](\n// new Date()[_0x351b4b(0x185, \"hY7y\")]() / 0x3e8\n// )[_0x351b4b(0x4e5, \"n1oj\")](),\n// _0x196f42 = {\n// platform: _0x10282d[_0x351b4b(0xe0, \"obYi\")],\n// third_id: _0x10282d[_0x351b4b(0x44a, \"u*ru\")],\n// music_url: _0x10282d[_0x351b4b(0x409, \"%[Ik\")],\n// music_id: _0x10282d[_0x351b4b(0x476, \"SvDu\")],\n// };\n// (_0x196f42[_0x36b694[_0x351b4b(0x3cc, \"75HO\")]] = _0x336625),\n// (_0x196f42[_0x351b4b(0x3e8, \"C9Gu\")] = CryptoJs[\n// _0x351b4b(0x12a, \"3r^q\")\n// ](\n// _0x36b694[_0x351b4b(0x288, \"za4T\")](\n// _0x36b694[_0x351b4b(0x21b, \"[RLd\")](\n// _0x36b694[_0x351b4b(0x1dc, \"lM4M\")](\n// _0x36b694[_0x351b4b(0x317, \"hY7y\")](\n// _0x10282d[_0x351b4b(0x304, \"hEOB\")],\n// _0x36b694[_0x351b4b(0x45a, \"n1oj\")](\n// encodeURIComponent,\n// _0x10282d[_0x351b4b(0xe9, \"%!yu\")]\n// )\n// ),\n// _0x10282d[_0x351b4b(0x259, \"gqjc\")]\n// ),\n// Config[_0x351b4b(0x365, \"IZB8\")]\n// ),\n// _0x336625\n// )\n// )[_0x351b4b(0x50f, \"CC8d\")]()),\n// (0x0, axios_1[_0x351b4b(0x2eb, \"PUu(\")])({\n// method: _0x36b694[_0x351b4b(0x33b, \"^%hc\")],\n// url: _0x4ba485,\n// data: qs[_0x351b4b(0x432, \"EzBF\")](_0x196f42),\n// })[_0x351b4b(0x452, \"0fr)\")]((_0x2e3c54) => {\n// const _0x2a4a40 = _0x351b4b;\n// console[_0x2a4a40(0x1a1, \"gqjc\")](\n// _0x36b694[_0x2a4a40(0x23a, \"3r^q\")],\n// _0x2e3c54[_0x2a4a40(0x271, \"Y7Oy\")]\n// );\n// });\n// }\n// } catch (_0x5a5c37) {\n// if (\n// _0x36b694[_0x351b4b(0x390, \"gqjc\")](\n// _0x36b694[_0x351b4b(0x487, \"tq2O\")],\n// _0x36b694[_0x351b4b(0x2ce, \"UP$$\")]\n// )\n// )\n// return null;\n// else\n// console[_0x351b4b(0x2c9, \"$Sw1\")](\n// _0x36b694[_0x351b4b(0x263, \"jLvN\")],\n// _0x5a5c37\n// );\n// }\n// }\nasync function getMusicKuWoApp(musicItem, thirdItem) {\n\n let ret = { url: \"\" };\n try {\n if (thirdItem != null) {\n ret = getMusicKuWoSource(thirdItem);\n } else {\n let result1 = await getSearchKuwo(\n musicItem\n );\n if (result1) {\n let obj1 = {\n platform: 'yun',\n third_id: result1[\"id\"],\n };\n (ret = await getMusicKuWoSource(\n obj1\n ));\n }\n\n }\n } catch { }\n return ret;\n}\n\n\n\nasync function getSearchKuwo(musicItem) {\n\n let artist = musicItem.artist.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n title = musicItem.title.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n cmb = artist + \"\\x20\" + title;\n const response = (\n await (0, axios_1.default)({\n method: 'get',\n url: 'http://search.kuwo.cn/r.s',\n params: {\n client: \"kt\",\n all: cmb,\n pn: 0x0,\n rn: 0x1e,\n uid: 794762570,\n ver: 'kwplayer_ar_9.2.2.1',\n vipver: \"1\",\n show_copyright_off: 1,\n newver: 1,\n ft: 'music',\n cluster: 0,\n strategy: 2012,\n encoding: 'utf8',\n rformat: 'json',\n vermerge: 1,\n mobi: 1,\n issubtitle: 1,\n },\n })\n ).data;\n let formattedResult =\n response.abslist.map(\n formatYunMusicItem\n );\n return formattedResult.find(\n (item) =>\n item.title\n .toLowerCase()\n .replaceAll(\"\\x20\", \"\")\n .replaceAll(\"&\", \",\") == title &&\n item.artist\n .toLowerCase()\n .replaceAll(\"\\x20\", \"\")\n .replaceAll(\"&\", \",\") == artist\n );\n}\n\n// async function saveServer(musicItem, _0x27af92) {\n// const _0x28b4f5 = _0x372c47,\n// _0x32dce3 = {\n// sBjiW: function (_0x3303d0, _0x358212) {\n// return _0x3303d0 / _0x358212;\n// },\n// bcpIU: function (_0x2f2ef6, _0x668081) {\n// return _0x2f2ef6(_0x668081);\n// },\n// Gcrxm: \"sign\",\n// zooMS: function (_0x423e5b, _0x145eaa) {\n// return _0x423e5b + _0x145eaa;\n// },\n// cYiqe: \"post\",\n// };\n// try {\n// let serverUrl = \"https://adad23u.appinstall.life:2358/api/yun/send\",\n// time = Math.round(Date.now() / 1000),\n// data = {\n// platform: Config.platform,\n// third_id: musicItem.songmid,\n// title: musicItem.title,\n// artwork: musicItem.artwork,\n// artist: musicItem.artist,\n// },\n// data1 = {\n// musicInfo: encodeURIComponent(JSON.stringify(data)),\n// payInfo: encodeURIComponent(JSON.stringify(_0x27af92)),\n// time: time,\n// };\n\n// (data1.sign = CryptoJs.MD5(\n// data1.musicInfo + data1.payInfo + Config.key + time\n// ).toString()),\n// (0x0, axios_1[_0x28b4f5(0xcf, \"EryH\")])({\n// method: _0x32dce3[_0x28b4f5(0x297, \"hY7y\")],\n// url: serverUrl,\n// data: qs[_0x28b4f5(0x4e4, \"^!X0\")](data1),\n// })[_0x28b4f5(0x3fb, \"a5UL\")]((_0x757b7d) => {\n// const _0x1ca823 = _0x28b4f5;\n// console[_0x1ca823(0x33d, \"lM4M\")](\n// \"\u63d0\u4ea4\",\n// _0x757b7d[_0x1ca823(0x3fc, \"CC8d\")]\n// );\n// });\n// } catch (e) { }\n// }\n\nasync function getMusic2t58(musicItem, resultItem) {\n\n try {\n if (resultItem !== null) {\n let params = {\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded',\n Referer:\n 'http://www.2t58.com/song/' +\n resultItem.third_id +\n '.html',\n },\n },\n response = (\n await (0x0, axios_1.default)({\n method: 'post',\n url: 'http://www.2t58.com/js/play.php',\n headers: params.headers,\n data:\n 'id=' +\n resultItem.third_id +\n '&type=music',\n })\n ).data;\n\n\n return response.url != \"\"\n ? ({ url: response.url })\n : { url: \"\" }\n }\n let artist = musicItem.artist.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n title = musicItem.title.toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\" \", \"\").replaceAll(\"&\", \"\"),\n enc = encodeURIComponent(artist + '\\x20' + title),\n url =\n 'http://www.2t58.com/so/' + enc + '.html',\n res = (\n await (0, axios_1.default)({\n method: 'get',\n url: url,\n timeout: 5000,\n })\n ).data;\n var reg = /href=\"\\/song\\/(.+?).html\" target=\"_mp3\">(.+?)<\\/a>/g;\n let regResult = res.matchAll(reg),\n resultArr = Array.from(regResult),\n resultArr1 = [];\n for (\n let i = 0;\n i < resultArr.length;\n i++\n ) {\n let item = resultArr[i],\n splitResult = item[2].split(\"-\"),\n singerName = splitResult[0].toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\"&\", \",\"),\n str = \"\";\n for (\n var j = 1;\n j < splitResult.length;\n j++\n ) {\n str += splitResult[j].toLowerCase().replaceAll(\"\\x20\", \"\").replaceAll(\" \", \"\").replaceAll(\"&\", \"\");\n }\n let resultItem = {\n key: item[1],\n singerName: singerName,\n songName: str,\n };\n resultArr1.push(resultItem);\n }\n let targetItem = resultArr1.find(\n (item) =>\n item.singerName == artist &&\n item.songName == title\n );\n if (targetItem) {\n let params = {\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded',\n Referer:\n 'http://www.2t58.com/song/' +\n targetItem.key +\n '.html',\n },\n },\n response = (\n await (0, axios_1.default)({\n method: 'post',\n url: 'http://www.2t58.com/js/play.php',\n headers: params.headers,\n data:\n \"id=\" +\n targetItem.key +\n '&type=music',\n })\n ).data;\n if (\n response.url !== ''\n )\n return (\n (resultItem = {\n platform: '2t58',\n third_id: targetItem.key,\n }),\n // saveServer(musicItem, resultItem),\n { url: response.url }\n );\n return { url: \"\" };\n } else return { url: \"\" };\n } catch (e) {\n console.error(e);\n return {\n url: \"\"\n }\n\n }\n}\n\n\nasync function getMusicZZ123(musicItem) {\n return {\n url: \"\"\n }\n // const _0x2a4257 = _0x372c47,\n // _0x36587e = {\n // CsBOg: function (_0x3f0149, _0x2104d9) {\n // return _0x3f0149(_0x2104d9);\n // },\n // nJdTL: function (_0x5a67bf, _0x126256) {\n // return _0x5a67bf == _0x126256;\n // },\n // nxuET: function (_0x131ceb, _0x1fcc73) {\n // return _0x131ceb / _0x1fcc73;\n // },\n // DDpnZ: function (_0x2c40b1, _0x560189) {\n // return _0x2c40b1(_0x560189);\n // },\n // sbRhb: function (_0x45f069, _0x4ba4b8) {\n // return _0x45f069(_0x4ba4b8);\n // },\n // MSQof: 'sign',\n // tfVyS: function (_0x1392e2, _0xe47d35) {\n // return _0x1392e2 + _0xe47d35;\n // },\n // zYReb: function (_0x34f4e5, _0x1d6862) {\n // return _0x34f4e5 + _0x1d6862;\n // },\n // CPFrQ: 'post',\n // syvCc: function (_0x5cd778, _0x5110d6) {\n // return _0x5cd778 != _0x5110d6;\n // },\n // mGmIM: function (_0x2136ef, _0xdc7579) {\n // return _0x2136ef === _0xdc7579;\n // },\n // VWOCG: 'SqFmM',\n // FoHeL: 'YfEid',\n // tAfzh: function (_0x97b101, _0x8a0eca) {\n // return _0x97b101 + _0x8a0eca;\n // },\n // eiZQb: 'search',\n // JDRmt: function (_0x39d41e, _0xe25663) {\n // return _0x39d41e > _0xe25663;\n // },\n // myfEd: function (_0x4d3c7a, _0x6856df) {\n // return _0x4d3c7a !== _0x6856df;\n // },\n // ogkfU: 'lwEdd',\n // QdmeR: 'songinfo',\n // YPnie: 'CeZyJ',\n // IDUmq: 'gutZH',\n // TIdRB: function (_0x2b4f83, _0xd6828b) {\n // return _0x2b4f83 === _0xd6828b;\n // },\n // eKZVG: 'alXbW'\n // };\n\n // try {\n // let artist = musicItem.artist,\n // title = musicItem.title;\n // var reg = /\\(.*?\\)/gis;\n // let matchResult = title.match(reg);\n // (matchResult !== null) &&\n // matchResult[_0x2a4257(0x2f7, \"k30p\")] > 0 &&\n // (_0x36587e[_0x2a4257(0x132, \"1]Wc\")](\n // _0x36587e[_0x2a4257(0x30a, \"AhM)\")],\n // _0x36587e[_0x2a4257(0x43f, \"UP$$\")]\n // )\n // ? _0x268250[_0x2a4257(0x146, \"Mc&5\")](\n // _0x3bc141 +\n // \"=\" +\n // _0x36587e[_0x2a4257(0x376, \"tq2O\")](\n // _0x5dea7c,\n // _0x23b218[_0x21f5b9]\n // )\n // )\n // : (title = title[_0x2a4257(0x153, \"Xq##\")](\n // matchResult[0x0],\n // \"\"\n // )));\n // (matchResult !== null) &&\n // matchResult[_0x2a4257(0x100, \"gqjc\")] > 0x0 &&\n // (title = title[_0x2a4257(0xce, \"jLvN\")](matchResult[0x0], \"\"));\n // artist = artist.replaceAll(\"/\", \",\");\n // let splitResult = artist.split(\",\"),\n // resultArr = [];\n // splitResult.forEach((item) => {\n // let name = chineseSel(item);\n // (name === \"\")\n // ? resultArr.push(item)\n // : resultArr.push(name);\n // });\n // let query = splitResult.join(\"\\x20\") + '-' + title;\n // const res = (\n // await (0, axios_1.default)({\n // method: 'post',\n // url: 'https://zz123.com/ajax/',\n // headers: ZZ123Config.headers,\n // params: {\n // act: 'search',\n // key: query,\n // page: 1,\n // },\n // })\n // ).data;\n // if (\n // _0x36587e[_0x2a4257(0xe1, \"^%hc\")](\n // res[_0x2a4257(0x312, \"C9Gu\")][_0x2a4257(0x1e3, \"3r^q\")],\n // 0x0\n // )\n // ) {\n // let _0x157928 = res[_0x2a4257(0x421, \"YiIZ\")][\n // _0x2a4257(0x174, \"0fr)\")\n // ](\n // (_0x53d159) =>\n // _0x53d159[_0x2a4257(0x4d8, \"X@&D\")] ==\n // musicItem[_0x2a4257(0x22c, \"$Sw1\")] &&\n // _0x53d159[_0x2a4257(0x202, \"xAPG\")] ==\n // musicItem[_0x2a4257(0x206, \"a5UL\")]\n // );\n // if (\n // _0x36587e[_0x2a4257(0x321, \"C9Gu\")](\n // _0x157928[_0x2a4257(0x387, \"jLvN\")],\n // 0x0\n // )\n // ) {\n // if (\n // _0x36587e[_0x2a4257(0x16b, \"%!yu\")](\n // _0x36587e[_0x2a4257(0x38b, \"DJ#n\")],\n // _0x36587e[_0x2a4257(0x38b, \"DJ#n\")]\n // )\n // ) {\n // let _0x4ad043 =\n // _0x2b76f8[_0x2a4257(0x164, \"cgFM\")] + _0x2a4257(0x34b, \"0fr)\"),\n // _0x4407be = _0x191176[_0x2a4257(0x244, \"ESa4\")](\n // _0x36587e[_0x2a4257(0x2d4, \"cgFM\")](\n // new _0x4b0b79()[_0x2a4257(0x32b, \"gqjc\")](),\n // 0x3e8\n // )\n // )[_0x2a4257(0x306, \"hEOB\")](),\n // _0x156142 = {\n // platform: _0x205835[_0x2a4257(0x1a3, \"EzBF\")],\n // third_id: _0x2648cd[_0x2a4257(0x2f8, \"a5UL\")],\n // title: _0x4772e3[_0x2a4257(0x4fd, \"*agp\")],\n // artwork: _0x51ca0f[_0x2a4257(0x310, \"tq2O\")],\n // artist: _0x26b1c4[_0x2a4257(0x471, \"cgFM\")],\n // },\n // _0x2a3dad = {\n // musicInfo: _0x36587e[_0x2a4257(0x12d, \"Mc&5\")](\n // _0x5e573d,\n // _0x4388a9[_0x2a4257(0x2da, \"k30p\")](_0x156142)\n // ),\n // payInfo: _0x36587e[_0x2a4257(0x104, \"PUu(\")](\n // _0x52b7ba,\n // _0x3817c1[_0x2a4257(0x163, \"CC8d\")](_0xe77097)\n // ),\n // time: _0x4407be,\n // };\n // (_0x2a3dad[_0x36587e[_0x2a4257(0x309, \"biLz\")]] = _0x1cc39d[\n // _0x2a4257(0x145, \"IZB8\")\n // ](\n // _0x36587e[_0x2a4257(0x1d3, \"EzBF\")](\n // _0x36587e[_0x2a4257(0x2b2, \"WSxn\")](\n // _0x2a3dad[_0x2a4257(0x176, \"mpeN\")],\n // _0x2a3dad[_0x2a4257(0x363, \"%[Ik\")]\n // ) + _0x36aa2a[_0x2a4257(0xfc, \"fm9T\")],\n // _0x4407be\n // )\n // )[_0x2a4257(0x480, \"Mc&5\")]()),\n // (0x0, _0x3bab1a[_0x2a4257(0x199, \"za4T\")])({\n // method: _0x36587e[_0x2a4257(0x3bc, \"AhM)\")],\n // url: _0x4ad043,\n // data: _0x5f49a6[_0x2a4257(0x47c, \"Mc&5\")](_0x2a3dad),\n // })[_0x2a4257(0x427, \"[RLd\")]((_0x1ac965) => {\n // const _0x284132 = _0x2a4257;\n // _0x140ae4[_0x284132(0x17c, \"G*8K\")](\n // \"\u63d0\u4ea4\",\n // _0x1ac965[_0x284132(0x35a, \"tq2O\")]\n // );\n // });\n // } else {\n // const _0x3bd1fa = (\n // await (0x0, axios_1[_0x2a4257(0x19e, \"HM9^\")])({\n // method: _0x36587e[_0x2a4257(0x385, \"%!yu\")],\n // url: _0x2a4257(0x3ee, \"fm9T\"),\n // headers: ZZ123Config[_0x2a4257(0x3a5, \"AhM)\")],\n // params: {\n // act: _0x36587e[_0x2a4257(0x4d5, \"SvDu\")],\n // id: _0x157928[0x0][\"id\"],\n // },\n // })\n // )[_0x2a4257(0x46c, \"3r^q\")];\n // if ((_0x3bd1fa[_0x2a4257(0x3c7, \"1]Wc\")] = 0xc8))\n // return {\n // url:\n // _0x2a4257(0xcc, \"IZB8\") +\n // _0x3bd1fa[_0x2a4257(0x3ce, \"HM9^\")][_0x2a4257(0x283, \"xAPG\")],\n // };\n // else {\n // if (\n // _0x36587e[_0x2a4257(0x1ba, \"n1oj\")](\n // _0x36587e[_0x2a4257(0x426, \"EzBF\")],\n // _0x36587e[_0x2a4257(0x15f, \"k%k@\")]\n // )\n // ) {\n // let _0x378b0c = [];\n // const _0x40abe8 = /[\\u4e00-\\u9fa5]/g;\n // return (\n // _0x264cad &&\n // (_0x378b0c = _0x10a46e[_0x2a4257(0x1b7, \"ESa4\")](_0x40abe8)),\n // _0x378b0c?.[_0x2a4257(0x4b6, \"75HO\")]\n // ? _0x378b0c[_0x2a4257(0x47f, \"0fr)\")](\"\")\n // : \"\"\n // );\n // } else return { url: \"\" };\n // }\n // }\n // }\n // }\n // return { url: \"\" };\n // } catch (e) {\n // console.log(e)\n // return { url: \"\" };\n // }\n}\n\n\n\nasync function getMusicMigu(musicItem) {\n let artist = musicItem.artist,\n title = musicItem.title,\n enc = encodeURIComponent(artist + \"\\x20\" + title);\n try {\n\n const headers = {\n Accept: 'application/json, text/javascript, */*; q=0.01',\n \"Accept-Encoding\": 'gzip, deflate, br',\n \"Accept-Language\": 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n Connection: 'keep-alive',\n \"Content-Type\": 'application/x-www-form-urlencoded; charset=UTF-8',\n Host: 'm.music.migu.cn',\n Referer: 'https://m.music.migu.cn/v3/search?keyword=' + encodeURIComponent(enc),\n \"Sec-Fetch-Dest\": 'empty',\n \"Sec-Fetch-Mode\": 'cors',\n \"Sec-Fetch-Site\": 'same-origin',\n \"User-Agent\": 'Mozilla/5.0 (Linux; Android 6.0.1; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36 Edg/89.0.774.68',\n \"X-Requested-With\": 'XMLHttpRequest',\n },\n params = { keyword: enc, type: 2, pgc: 1, rows: 20 },\n res = await axios_1.default.get('https://m.music.migu.cn/migu/remoting/scr_search_tag', {\n headers: headers,\n params: params,\n });\n if (!res.data.musics) {\n return { url: \"\" };\n }\n let filterResult = res.data.musics.filter((_) => {\n let canPlay = _.mp3 || _.listenUrl || _.lisQq || _.lisCr;\n return (\n canPlay && _.artist === artist\n );\n });\n if (\n filterResult.length > 0\n ) {\n let first = filterResult[0],\n finalUrl = first.mp3 || first.listenUrl || first.lisQq || first.lisCr;\n return { url: finalUrl };\n }\n } catch {\n\n }\n return { url: \"\" };\n}\n\n\n\n\nasync function getMusicFangpi(musicItem, thirdItem) {\n try {\n if (thirdItem) {\n let response2 = (\n await (0x0, axios_1.default)({\n method: 'get',\n url:\n \"https://www.fangpi.net/api/play_url?id=\" +\n thirdItem.third_id +\n '&json=1',\n timeout: 5000,\n })\n ).data;\n if (\n response2.code === 1 &&\n response2.data.url &&\n response2.data.url != \"\"\n ) {\n\n return {\n url: response2.data.url,\n };\n\n }\n }\n let artist = musicItem.artist,\n title = musicItem.title;\n var reg = /\\(.*?\\)/gis;\n let matchResult = title.match(reg);\n\n matchResult != null && (\n matchResult.length > 0\n ) &&\n (title = title.replace(matchResult[0], \"\"));\n artist = artist.replaceAll(\"/\", \",\");\n let artistSplit = artist.split(\",\"),\n resultArr = [];\n artistSplit.forEach((item) => {\n let sel = chineseSel(\n item\n );\n sel === \"\"\n ? resultArr.push(item)\n : resultArr.push(sel);\n });\n let enc = encodeURIComponent(resultArr.join(\"\\x20\") +\n \"\\x20\" +\n title),\n url = 'https://www.fangpi.net/s/' + enc;\n const response = (\n await (0, axios_1.default)({\n url: url,\n method: 'get',\n timeout: 3000,\n })\n ).data;\n var reg1 = /class=\"col-5 col-content\">(.*?)<\\/a>/gis;\n let matchResult1 = response.match(reg1);\n for (const item of matchResult1) {\n let idx = _(\n item.indexOf(\n '/music/'\n ) +\n 7\n ),\n substrItem = item.substring(idx);\n idx = substrItem.indexOf(\"\\x22\");\n let str2 = substrItem.substring(0, idx),\n response2 = (\n await (0, axios_1.default)({\n method: 'get',\n url:\n 'https://www.fangpi.net/api/play_url?id=' + str2 + '&json=1',\n timeout: 5000,\n })\n ).data;\n if (\n response2.code === 1 &&\n response2.data.url &&\n response2.data.url != \"\"\n ) {\n return (\n (thirdItem = {\n platform: 'fangpi',\n third_id: str2,\n }),\n // _0x43e8cc[_0x12b518(0x27e, \"mpeN\")](\n // saveServer,\n // musicItem,\n // thirdItem\n // ),\n {\n url: response2.data.url,\n }\n );\n }\n\n }\n return { url: \"\" };\n } catch {\n return { url: \"\" };\n }\n}\n\n\n\nasync function getMusicSource(musicItem, quality) {\n try {\n if (musicItem.isfree) {\n let source = await getMusicQQ(musicItem, quality);\n if (source) {\n return source;\n }\n }\n let obj = { url: \"\" },\n api = Config.server + \"/api/yun\",\n time = Math.round(Date.now() / 1000).toString(),\n params = {\n platform: Config.platform,\n third_id: musicItem.songmid,\n time: time,\n };\n params.sign = CryptoJs.MD5(params.third_id + Config.key + +time).toString();\n let res = (\n await (0, axios_1.default)({\n method: \"post\",\n url: api,\n data: qs.stringify(params),\n })\n ).data;\n if (res.code !== 1 && res.data.length > 0) {\n let results = res.data;\n for (var result of results) {\n\n if (\n result.platform == 'yun'\n )\n obj = (obj.url === \"\")\n ? await getMusicKuWoApp(\n musicItem,\n result\n )\n : obj;\n else {\n if (\n result.platform === '2t58'\n )\n obj =\n obj.url == \"\"\n ? await getMusic2t58(musicItem, result)\n : obj;\n else if (result.platform === 'fangpi') {\n obj = (obj.url === \"\"\n ? await getMusicFangpi(musicItem, result)\n : obj);\n }\n }\n }\n }\n\n\n return (\n (obj = obj.url === \"\"\n ? await getMusicKuWoApp(\n musicItem,\n null\n )\n : obj),\n (obj = obj.url === \"\"\n ? await getMusic2t58(\n musicItem,\n null\n )\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicZZ123(musicItem)\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicMigu(musicItem)\n : obj),\n (obj = obj.url === \"\"\n ? await getMusicFangpi(\n musicItem,\n null\n )\n : obj),\n obj &&\n obj.url.indexOf(\n 'http'\n ) == -1 && (obj.url = \"\"),\n obj\n );\n } catch (e) {\n // log\n console.log(e)\n }\n}\n\n\n\nasync function getMusicQQ(musicItem, quality) {\n\n let domain = \"\",\n purl = \"\",\n type = '128';\n if (quality === 'standard')\n type = '320';\n else {\n if (\n quality === 'high'\n ) {\n type = 'm4a';\n }\n\n else\n (quality === 'super') && (type = 'flac');\n }\n const result = await getSourceUrl(musicItem.songmid, type);\n\n if (result.req_0 && result.req_0.data && result.req_0.data.midurlinfo) {\n purl = result.req_0.data.midurlinfo[0].purl;\n }\n if (!purl) {\n return null;\n }\n if (domain === \"\") {\n domain =\n result.req_0.data.sip.find((i) => !i.startsWith(\"http://ws\")) ||\n result.req_0.data.sip[0];\n }\n return {\n url: `${domain}${purl}`,\n };\n}\n\n\nmodule.exports = {\n platform: \"QQ\u97f3\u4e50\",\n version: \"0.2.5\",\n cacheControl: \"no-cache\",\n hints: {\n importMusicSheet: [\n \"QQ\u97f3\u4e50APP\uff1a\u81ea\u5efa\u6b4c\u5355-\u5206\u4eab-\u5206\u4eab\u5230\u5fae\u4fe1\u597d\u53cb/QQ\u597d\u53cb\uff1b\u7136\u540e\u70b9\u5f00\u5e76\u590d\u5236\u94fe\u63a5\uff0c\u76f4\u63a5\u7c98\u8d34\u5373\u53ef\",\n \"H5\uff1a\u590d\u5236URL\u5e76\u7c98\u8d34\uff0c\u6216\u8005\u76f4\u63a5\u8f93\u5165\u7eaf\u6570\u5b57\u6b4c\u5355ID\u5373\u53ef\",\n \"\u5bfc\u5165\u65f6\u95f4\u548c\u6b4c\u5355\u5927\u5c0f\u6709\u5173\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\",\n ],\n },\n srcUrl: \"https://gitee.com/maotoumao/plugins-list1/raw/master/qq.js\",\n primaryKey: [\"id\", \"songmid\"],\n supportedSearchType: [\"music\", \"album\", \"sheet\", \"artist\", \"lyric\"],\n async search(query, page, type) {\n if (type === \"music\") {\n return await searchMusic(query, page);\n } else if (type === \"album\") {\n return await searchAlbum(query, page);\n } else if (type === \"artist\") {\n return await searchArtist(query, page);\n } else if (type === \"sheet\") {\n return await searchMusicSheet(query, page);\n } else if (type === \"lyric\") {\n return await searchLyric(query, page);\n }\n },\n async getMediaSource(musicItem, quality) {\n return await getMusicSource(musicItem, quality);\n },\n getLyric: getLyric,\n getAlbumInfo: getAlbumInfo,\n getArtistWorks: getArtistWorks,\n importMusicSheet: importMusicSheet,\n getTopLists: getTopLists,\n getTopListDetail: getTopListDetail,\n getRecommendSheetTags: getRecommendSheetTags,\n getRecommendSheetsByTag: getRecommendSheetsByTag,\n getMusicSheetInfo: getMusicSheetInfo,\n};", "id": "msg_1789568589943"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:10] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Loading plugin: QQ音乐 (非VIP), error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:10] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568589943: True [2026-09-16 22:23:10] [0.6.1] [INFO] js_plugin_manager.py:984: Loaded JS plugin: QQ音乐 (非VIP) [2026-09-16 22:23:10] [0.6.1] [INFO] js_plugin_manager.py:2724: 最新插件信息:{'书音FM': {'name': '书音FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KG': {'name': '元力KG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸歌词': {'name': '碳酸歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDav_lrc': {'name': 'WebDav_lrc', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易Ciallo~(∠・ω_ )⌒☆': {'name': '网易Ciallo~(∠・ω_ )⌒☆', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '猫耳FM': {'name': '猫耳FM', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Audiomack': {'status': 'loaded', 'load_time': 1789568589.9428074, 'enabled': True}, '迟言QQ': {'name': '迟言QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'udio': {'name': 'udio', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗JHMS': {'name': '酷狗JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '种子': {'name': '种子', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小枸音乐': {'name': '小枸音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '西瓜糖QQ': {'name': '西瓜糖QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '快手': {'name': '快手', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我': {'name': '酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_竹玥': {'name': '酷狗_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '爱听': {'name': '爱听', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我Fish': {'name': '酷我Fish', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ音乐 (非VIP)': {'status': 'loaded', 'load_time': 1789568590.2452257, 'enabled': True}, '网易专辑': {'name': '网易专辑', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩': {'name': '哔哩哔哩', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易音乐': {'name': '网易音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词千寻': {'name': '歌词千寻', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易bimiao': {'name': '网易bimiao', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力MG': {'name': '元力MG', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌曲宝': {'name': '歌曲宝', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水qishui音乐': {'name': '汽水qishui音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'suno': {'name': 'suno', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹侣': {'name': '酷我_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_笭鬼鬼': {'name': '网易_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_竹玥': {'name': '酷我_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_笭鬼鬼': {'name': '喜马拉雅_笭鬼鬼', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '哔哩哔哩_Cookie': {'name': '哔哩哔哩_Cookie', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '弥音QQ': {'name': '弥音QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗简云': {'name': '酷狗简云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '好听轻音乐': {'name': '好听轻音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '音悦台': {'name': '音悦台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'WebDAV': {'name': 'WebDAV', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Q音': {'name': 'Q音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云': {'name': '网易云', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'bilibili': {'name': 'bilibili', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_猫': {'name': 'QQ_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我音乐Thomas': {'name': '酷我音乐Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '开心汽水': {'name': '开心汽水', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GD音乐台': {'name': 'GD音乐台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云音乐 (非VIP)': {'name': '网易云音乐 (非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '歌词网': {'name': '歌词网', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '喜马拉雅_竹侣': {'name': '喜马拉雅_竹侣', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_念心': {'name': 'QQ_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云音乐 (酷我非VIP)': {'name': '云音乐 (酷我非VIP)', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力WY': {'name': '元力WY', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '云云音乐': {'name': '云云音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易云电台': {'name': '网易云电台', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力KW': {'name': '元力KW', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗Thomas': {'name': '酷狗Thomas', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '碳酸氢钠': {'name': '碳酸氢钠', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗': {'name': '酷狗', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '闻音酷我': {'name': '闻音酷我', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_猫': {'name': '网易_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ Vip': {'name': 'QQ Vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'CCTV听音': {'name': 'CCTV听音', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '小蜗音乐': {'name': '小蜗音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '元力QQ': {'name': '元力QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_念心': {'name': '酷我_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_念心': {'name': '网易_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我_猫': {'name': '酷我_猫', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Navidrome': {'name': 'Navidrome', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'GitCode': {'name': 'GitCode', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷我JHMS': {'name': '酷我JHMS', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '酷狗_念心': {'name': '酷狗_念心', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '5sing': {'name': '5sing', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '网易_竹玥': {'name': '网易_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '落月QQ': {'name': '落月QQ', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ_竹玥': {'name': 'QQ_竹玥', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'Youtube': {'name': 'Youtube', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, 'QQ歌词': {'name': 'QQ歌词', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '汽水vip': {'name': '汽水vip', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '腾讯音乐': {'name': '腾讯音乐', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '千千': {'name': '千千', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}, '溯音网易': {'name': '溯音网易', 'enabled': False, 'loaded': False, 'error': 'Not loaded (not in important plugins list)'}} [2026-09-16 22:23:21] [0.6.1] [INFO] online_music.py:81: 在线获取歌曲列表! [2026-09-16 22:23:21] [0.6.1] [INFO] online_music.py:853: 通过MusicFree插件搜索音乐列表! [2026-09-16 22:23:21] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin QQ音乐 (非VIP) for keyword: 晴天, type: music [2026-09-16 22:23:21] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: QQ音乐 (非VIP) [2026-09-16 22:23:21] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 10, 'type': 'music'} [2026-09-16 22:23:21] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 10, "type": "music"}, "id": "msg_1789568601552"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:22] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568601552: True [2026-09-16 22:23:22] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin QQ音乐 (非VIP), isEnd: False, found 20 results [2026-09-16 22:23:22] [0.6.1] [INFO] js_plugin_manager.py:1124: JS Plugin Manager starting search in plugin Audiomack for keyword: 晴天, type: music [2026-09-16 22:23:22] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: search for plugin: Audiomack [2026-09-16 22:23:22] [0.6.1] [INFO] js_plugin_manager.py:201: JS Plugin Manager search params: {'keywords': '晴天', 'page': 1, 'limit': 10, 'type': 'music'} [2026-09-16 22:23:22] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "search", "pluginName": "Audiomack", "params": {"keywords": "\u6674\u5929", "page": 1, "limit": 10, "type": "music"}, "id": "msg_1789568602554"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:23] [0.6.1] [INFO] js_plugin_manager.py:211: JS Plugin Manager received response for message msg_1789568602554: True [2026-09-16 22:23:23] [0.6.1] [INFO] js_plugin_manager.py:1160: JS Plugin Manager search completed in plugin Audiomack, isEnd: False, found 20 results [2026-09-16 22:23:23] [0.6.1] [INFO] js_plugin_manager.py:2290: 排序后列表信息::[{'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 127579969, 'songmid': '0048uGQU3QS5XN', 'title': '晴天', 'artist': '旺仔小乔', 'album': '', 'albumid': 0, 'albummid': '', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 101847263, 'songmid': '000pgbEQ1C4Hsv', 'title': '晴天', 'artist': '刘瑞琦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M0000036XVtV4VvtcX.jpg', 'album': '再次寻找周杰伦', 'albumid': 933770, 'albummid': '0036XVtV4VvtcX', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 338082483, 'songmid': '004MA5TJ0Gwa5n', 'title': '晴天', 'artist': '启蒙动画精选', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000002bZZ3t2F81Z4.jpg', 'album': '0-6个月智慧伴听课程|早教儿歌|智力开发', 'albumid': 15303285, 'albummid': '002bZZ3t2F81Z4', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 248309210, 'songmid': '004Io7OR4UeT8S', 'title': '晴天', 'artist': '空匪', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000002ILnpg4D46no.jpg', 'album': '晴天', 'albumid': 9797084, 'albummid': '002ILnpg4D46no', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 725882149, 'songmid': '000d7lxU2l0YzL', 'title': '晴天', 'artist': '皮卡丨邱', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000gumaZ1pbKbi.jpg', 'album': '晴天', 'albumid': 102566304, 'albummid': '000gumaZ1pbKbi', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 10921920, 'artwork': 'https://i.audiomack.com/zhou-ji-kang/2d8e7c1b36.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 18955314, 'artwork': 'https://i.audiomack.com/manmyl/e2a8c0c1bd.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '周杰伦JAY热门歌曲合集', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 76628510, 'artwork': 'https://i.audiomack.com/zhou-jie-lun-21/9292874-23.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰倫', 'album': '葉惠美', 'url_slug': 'qing-tian-1746303', 'platform': 'Audiomack'}, {'id': 14925953, 'artwork': 'https://i.audiomack.com/hdplus/8ea9c79f76.webp', 'duration': 270, 'title': '晴天', 'artist': '周杰伦', 'album': '叶惠美', 'url_slug': '14925953', 'platform': 'Audiomack'}, {'id': 84771008, 'artwork': 'https://i.audiomack.com/xiang-wan-sheng/3ecd6250fe.webp', 'duration': 180, 'title': '晴天', 'artist': '向晚声', 'album': '梦一场', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 45488051, 'artwork': 'https://i.audiomack.com/hua-dan/13807416-3.webp', 'duration': 148, 'title': '晴天', 'artist': '花旦', 'album': '晴天', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 34083478, 'artwork': 'https://i.audiomack.com/liu-bing-yin-le-fang/11606914-4.webp', 'duration': 241, 'title': '晴天', 'artist': '刘兵音乐坊', 'album': '', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 14592791, 'artwork': 'https://i.audiomack.com/fantuan/c1f2ffea6c.webp', 'duration': 170, 'title': '晴天', 'artist': 'TNT时代少年团 宋亚轩', 'album': '', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 100561966, 'artwork': 'https://i.audiomack.com/shijinting96/5c8b6784c1.webp', 'duration': 80, 'title': '晴天', 'artist': 'Dj King Et', 'album': '', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 42251794, 'artwork': 'https://i.audiomack.com/mu-wan-xin/12968829-4.webp', 'duration': 227, 'title': '晴天', 'artist': '沐婉伈', 'album': '', 'url_slug': 'qing-tian', 'platform': 'Audiomack'}, {'id': 332999022, 'songmid': '001LcPEv1TEenh', 'title': '晴天 (女声独唱版)', 'artist': '梅菜扣肉肉', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000rusYr0tlsP1.jpg', 'album': '晴天 (独唱版)', 'albumid': 23491221, 'albummid': '000rusYr0tlsP1', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 548046023, 'songmid': '0042rlGx2WHBrG', 'title': '晴天 (深情版)', 'artist': 'Lucky小爱', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000004QUu810PIQis.jpg', 'album': '晴天 (深情版)', 'albumid': 59229569, 'albummid': '004QUu810PIQis', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 244115385, 'songmid': '004Fs2FP1EvZYc', 'title': '晴天 (Live)', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000004fXSyj3bWTMN.jpg', 'album': '周杰伦地表最强世界巡回演唱会', 'albumid': 9040723, 'albummid': '004fXSyj3bWTMN', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 709354555, 'songmid': '000vdtpk24wGR8', 'title': '晴天 (DJ降调0.9x版)', 'artist': 'Missy', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000002DNnSN2COLyW.jpg', 'album': 'Sky Mourn', 'albumid': 97903251, 'albummid': '002DNnSN2COLyW', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 103104770, 'songmid': '003YS1Tz2KP6aq', 'title': '晴天 (Live)', 'artist': '关诗敏', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000002dxkHP2hiwFe.jpg', 'album': '中国好声音第四季 第4期', 'albumid': 1060096, 'albummid': '002dxkHP2hiwFe', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 237956690, 'songmid': '000vudIm1jIHfo', 'title': '晴天 - 钢琴独奏版', 'artist': 'Shawn\xa0Ying', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000004foQp41IONRk.jpg', 'album': 'The Piano Sings', 'albumid': 7914255, 'albummid': '004foQp41IONRk', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 639046, 'songmid': '003jkmaF0MJMOP', 'title': '晴天,雨天', 'artist': '张力尹', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000OgeCH0ICMKo.jpg', 'album': '晴天,雨天 EP', 'albumid': 54354, 'albummid': '000OgeCH0ICMKo', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 383746995, 'songmid': '001v32VM1ORqn5', 'title': '晴天 (温柔女声版)', 'artist': '吉拉朵', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M0000001EZQ308fHVO.jpg', 'album': '晴天', 'albumid': 32437277, 'albummid': '0001EZQ308fHVO', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 674819347, 'songmid': '000lqVsF3OLYBk', 'title': '晴天(睡眠音乐 催眠曲5分钟入睡)', 'artist': '高效睡眠AYC', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000001J4J4e1bb2Kl.jpg', 'album': '睡眠音乐 放松大脑 舒缓解压 深度睡眠音乐 催眠曲5分钟入睡 解压放松轻音乐', 'albumid': 94044995, 'albummid': '001J4J4e1bb2Kl', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 714331256, 'songmid': '000XJMkJ0Z2KWh', 'title': '晴天 (DJ氛围版)', 'artist': 'Missy', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000001wAZWM08ucph.jpg', 'album': '隔岸', 'albumid': 99346139, 'albummid': '001wAZWM08ucph', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 544112976, 'songmid': '003f8NCb36xulx', 'title': '晴天 (温柔男声版)', 'artist': '六同学', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000003skaT51DZnqw.jpg', 'album': '晴天搁浅一路向北', 'albumid': 58437262, 'albummid': '003skaT51DZnqw', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 66894357, 'artwork': 'https://i.audiomack.com/xiao-qi-lun/17139359-6.webp', 'duration': 207, 'title': '晴天(深情版)', 'artist': '肖启伦', 'album': '晴天(深情版)', 'url_slug': 'qing-tian-shen-qing-ban-1', 'platform': 'Audiomack'}, {'id': 18642964, 'artwork': 'https://i.audiomack.com/alex-chiong/f2a756da73.webp', 'duration': 270, 'title': '晴天 - 周杰伦', 'artist': 'Alex Chiong', 'album': '', 'url_slug': 'qing-tian-zhou-jie-lun', 'platform': 'Audiomack'}, {'id': 36371088, 'artwork': 'https://i.audiomack.com/le-zhi-yin/11260720-6.webp', 'duration': 188, 'title': '晴天雨', 'artist': '乐之音', 'album': '', 'url_slug': 'qing-tian-yu', 'platform': 'Audiomack'}, {'id': 69274891, 'artwork': 'https://i.audiomack.com/ze-zuo/fdecaa3744.webp', 'duration': 231, 'title': '碎玻璃与晨曦(晴天)', 'artist': '泽佐', 'album': '碎玻璃与晨曦(晴天)', 'url_slug': 'sui-bo-li-yu-chen-xi-qing-tian-1', 'platform': 'Audiomack'}, {'id': 12562471, 'artwork': 'https://i.audiomack.com/default-song-image.webp', 'duration': 270, 'title': '周杰伦 - 晴天', 'artist': '执笔', 'album': '', 'url_slug': 'zhou-jie-lun-qing-tian', 'platform': 'Audiomack'}, {'id': 10646510, 'artwork': 'https://i.audiomack.com/shinyykx/a72ba253ac.webp', 'duration': 170, 'title': 'TNT时代少年团宋亚轩 阿卡贝拉 Acapella Jay Chou 晴天 cover', 'artist': 'shinyykx', 'album': '', 'url_slug': 'tnt-acapella-jay-chou-cover', 'platform': 'Audiomack'}, {'id': 99771299, 'artwork': 'https://i.audiomack.com/akiicoco00/0ea8fc3923.webp', 'duration': 266, 'title': '本日モ晴天ナリ (JAZZ目線 Ver.)', 'artist': 'Myawto', 'album': '', 'url_slug': 'ben-rimo-qing-tiannari-jazz-mu-xian-ver-sped-up', 'platform': 'Audiomack'}, {'id': 20746319, 'artwork': 'https://i.audiomack.com/soundzofdaunderground/35d5507aeb.webp', 'duration': 98, 'title': 'ゼエゴ村/冬の晴天 (銀 雪)', 'artist': 'Various Artists', 'album': 'Lightning Legend: Daigo no Daibōken Original Soundtrack', 'url_slug': 'zeego-cundongno-qing-tian-yin-xue', 'platform': 'Audiomack'}, {'id': 10053730, 'artwork': 'https://i.audiomack.com/charmaine-52/7d55b2171d.webp', 'duration': 168, 'title': '曲肖冰_-_晴天「温柔女聲版_」Karendaidai', 'artist': '曲肖冰', 'album': '', 'url_slug': 'karendaidai', 'platform': 'Audiomack'}, {'id': 102065750, 'songmid': '001Bbywq2gicae', 'title': '搁浅', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000003DFRzD192KKD.jpg', 'album': '七里香', 'albumid': 20612, 'albummid': '003DFRzD192KKD', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 5665622, 'songmid': '001ypoXf0qaYi6', 'title': '晴', 'artist': '汪苏泷', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000CMxvP3yRuvR.jpg', 'album': '传世乐章', 'albumid': 543749, 'albummid': '000CMxvP3yRuvR', 'isfree': False, 'platform': 'QQ音乐 (非VIP)'}, {'id': 5001541, 'songmid': '002GEIH12WbEcB', 'title': 'Sunny Day', 'artist': 'Joy Williams', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000001G2kl31ivkpb.jpg', 'album': 'Songs from This - EP', 'albumid': 435890, 'albummid': '001G2kl31ivkpb', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'}, {'id': 42258392, 'artwork': 'https://i.audiomack.com/qing-tian-tian/12972024-4.webp', 'duration': 283, 'title': '原来爱是那么伤人', 'artist': '晴天天', 'album': '', 'url_slug': 'yuan-lai-ai-shi-na-me-shang-ren', 'platform': 'Audiomack'}] [2026-09-16 22:23:27] [0.6.1] [INFO] online_music.py:1177: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 2181600216 [2026-09-16 22:23:27] [0.6.1] [INFO] online_music.py:944: 已重置追加歌曲页码 [2026-09-16 22:23:27] [0.6.1] [INFO] online_music.py:1287: plugin_source_url : self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1072: 启动后台构建 tag cache [2026-09-16 22:23:27] [0.6.1] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-09-16 22:23:27] [0.6.1] [INFO] config_manager.py:82: save_cur_config ok [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:641: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:1186: 开始播放列表_online_webPush 晴天-周杰伦 [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:600: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:晴天-周杰伦 匹配数量:1 auto_index:None [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:513: cur_music 晴天-周杰伦 [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1184: get_music_url name:晴天-周杰伦 [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=SZgkEUYzw3M [2026-09-16 22:23:27] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=SZgkEUYzw3M [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1028: 已从【music/cache/tag_cache.json】加载 tag cache [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1088: ignore_tag_absolute_dirs: [] [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1044: 保存:tag cache 已保存到【music/cache/tag_cache.json】 [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1128: tag 更新完成 [2026-09-16 22:23:27] [0.6.1] [INFO] file.py:1142: [proxy:903970d9] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:23:27] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') [2026-09-16 22:23:27] [0.6.1] [INFO] file.py:1145: [proxy:903970d9] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:23:27] [0.6.1] [INFO] file.py:1173: [proxy:903970d9] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 22:23:27] [0.6.1] [INFO] file.py:1219: [proxy:903970d9] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 22:23:27] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: QQ音乐 (非VIP) [2026-09-16 22:23:27] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:23:27] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "isfree": true, "platform": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09"}, "quality": "standard", "id": "msg_1789568607557"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:23:57] [0.6.1] [ERROR] online_music.py:1620: Plugin QQ音乐 (非VIP) get_media_source failed: Message msg_1789568607557 timeout [2026-09-16 22:23:57] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:23:57] [0.6.1] [WARNING] conversation.py:181: Execption [2026-09-16 22:23:57] [0.6.1] [WARNING] device_player.py:564: 探路超时或网络异常(插件解析失败): [2026-09-16 22:23:57] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 2 [2026-09-16 22:23:57] [0.6.1] [INFO] file.py:1267: [proxy:903970d9] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= content_type=application/json content_length=43 [2026-09-16 22:23:57] [0.6.1] [ERROR] file.py:1382: [proxy:903970d9] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:440: get_next_music 晴天-周杰伦 [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:441: _play_next. name:晴天-周杰伦, cur_music:晴天-周杰伦 [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-09-16 22:23:58] [0.6.1] [INFO] music_library.py:600: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:晴天-周杰伦 匹配数量:1 auto_index:None [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:513: cur_music 晴天-周杰伦 [2026-09-16 22:23:58] [0.6.1] [INFO] music_library.py:1184: get_music_url name:晴天-周杰伦 [2026-09-16 22:23:58] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 22:23:58] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:23:58] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=hTtUl-cYFmM [2026-09-16 22:23:58] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=hTtUl-cYFmM [2026-09-16 22:23:58] [0.6.1] [INFO] file.py:1142: [proxy:1fb67289] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:23:58] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') [2026-09-16 22:23:58] [0.6.1] [INFO] file.py:1145: [proxy:1fb67289] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:23:58] [0.6.1] [INFO] file.py:1173: [proxy:1fb67289] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 22:23:58] [0.6.1] [INFO] file.py:1219: [proxy:1fb67289] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 22:23:58] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: QQ音乐 (非VIP) [2026-09-16 22:23:58] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:23:58] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "isfree": true, "platform": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09"}, "quality": "standard", "id": "msg_1789568638123"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:24:28] [0.6.1] [ERROR] online_music.py:1620: Plugin QQ音乐 (非VIP) get_media_source failed: Message msg_1789568638123 timeout [2026-09-16 22:24:28] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:24:28] [0.6.1] [INFO] file.py:1267: [proxy:1fb67289] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= content_type=application/json content_length=43 [2026-09-16 22:24:28] [0.6.1] [WARNING] conversation.py:181: Execption [2026-09-16 22:24:28] [0.6.1] [WARNING] device_player.py:564: 探路超时或网络异常(插件解析失败): [2026-09-16 22:24:28] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 3 [2026-09-16 22:24:28] [0.6.1] [ERROR] file.py:1382: [proxy:1fb67289] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:440: get_next_music 晴天-周杰伦 [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:441: _play_next. name:晴天-周杰伦, cur_music:晴天-周杰伦 [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-09-16 22:24:28] [0.6.1] [INFO] music_library.py:600: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:晴天-周杰伦 匹配数量:1 auto_index:None [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:513: cur_music 晴天-周杰伦 [2026-09-16 22:24:28] [0.6.1] [INFO] music_library.py:1184: get_music_url name:晴天-周杰伦 [2026-09-16 22:24:28] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 22:24:28] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:24:28] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=pN5bkViQ-VM [2026-09-16 22:24:28] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=pN5bkViQ-VM [2026-09-16 22:24:28] [0.6.1] [INFO] file.py:1142: [proxy:5492e081] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:24:28] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') [2026-09-16 22:24:28] [0.6.1] [INFO] file.py:1145: [proxy:5492e081] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:24:28] [0.6.1] [INFO] file.py:1173: [proxy:5492e081] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 22:24:28] [0.6.1] [INFO] file.py:1219: [proxy:5492e081] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 22:24:28] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: QQ音乐 (非VIP) [2026-09-16 22:24:28] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:24:28] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "isfree": true, "platform": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09"}, "quality": "standard", "id": "msg_1789568668688"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:24:58] [0.6.1] [ERROR] online_music.py:1620: Plugin QQ音乐 (非VIP) get_media_source failed: Message msg_1789568668688 timeout [2026-09-16 22:24:58] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:24:58] [0.6.1] [WARNING] conversation.py:181: Execption [2026-09-16 22:24:58] [0.6.1] [WARNING] conversation.py:193: get_latest_ask_from_xiaoai. All retries failed. [2026-09-16 22:24:58] [0.6.1] [WARNING] device_player.py:564: 探路超时或网络异常(插件解析失败): [2026-09-16 22:24:58] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 4 [2026-09-16 22:24:58] [0.6.1] [INFO] file.py:1267: [proxy:5492e081] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= content_type=application/json content_length=43 [2026-09-16 22:24:58] [0.6.1] [ERROR] file.py:1382: [proxy:5492e081] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:428: 开始播放下一首 [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:254: 顺序模式更新,不打乱 _online_webPush [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:440: get_next_music 晴天-周杰伦 [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:441: _play_next. name:晴天-周杰伦, cur_music:晴天-周杰伦 [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:316: play_internal. search_key: name:晴天-周杰伦 allow_download:True [2026-09-16 22:24:59] [0.6.1] [INFO] music_library.py:600: 根据【晴天-周杰伦】找到歌曲【['晴天-周杰伦']】 [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:352: play_internal. 搜索关键词:晴天-周杰伦 匹配数量:1 auto_index:None [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:513: cur_music 晴天-周杰伦 [2026-09-16 22:24:59] [0.6.1] [INFO] music_library.py:1184: get_music_url name:晴天-周杰伦 [2026-09-16 22:24:59] [0.6.1] [INFO] music_library.py:1199: in _get_web_music_url [2026-09-16 22:24:59] [0.6.1] [INFO] music_library.py:1208: get_music_url web music. name:晴天-周杰伦, url:self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:24:59] [0.6.1] [INFO] music_library.py:1338: Using token proxy url: https://music.9996655.xyz:443/proxy/music?token=pmp_LdllbqI [2026-09-16 22:24:59] [0.6.1] [INFO] device_player.py:546: 极速探路启动,触发后端代理解析: timeout=3.0s lx_server=False url=https://music.9996655.xyz:443/proxy/music?token=pmp_LdllbqI [2026-09-16 22:24:59] [0.6.1] [INFO] file.py:1142: [proxy:f225c57c] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:24:59] [0.6.1] [INFO] music_library.py:1408: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') [2026-09-16 22:24:59] [0.6.1] [INFO] file.py:1145: [proxy:f225c57c] expand_self_url parsed=ParseResult(scheme='https', netloc='music.9996655.xyz:443', path='/api/proxy/plugin-url', params='', query='data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0=', fragment='') final_url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= [2026-09-16 22:24:59] [0.6.1] [INFO] file.py:1173: [proxy:f225c57c] mode=music timeout=600s netloc=music.9996655.xyz:443 [2026-09-16 22:24:59] [0.6.1] [INFO] file.py:1219: [proxy:f225c57c] initial GET url=https://music.9996655.xyz:443/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '***'} [2026-09-16 22:24:59] [0.6.1] [INFO] js_plugin_manager.py:197: JS Plugin Manager sending message: getMediaSource for plugin: QQ音乐 (非VIP) [2026-09-16 22:24:59] [0.6.1] [INFO] js_plugin_manager.py:203: JS Plugin Manager music item: {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:24:59] [0.6.1] [WARNING] js_plugin_manager.py:146: Non-JSON output from Node.js process: [JS_PLUGIN_RUNNER] Raw message received: {"action": "getMediaSource", "pluginName": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09", "musicItem": {"id": 97773, "songmid": "0039MnYb0qxYhV", "title": "\u6674\u5929", "artist": "\u5468\u6770\u4f26", "artwork": "https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg", "album": "\u53f6\u60e0\u7f8e", "albumid": 8220, "albummid": "000MkMni19ClKG", "isfree": true, "platform": "QQ\u97f3\u4e50 \uff08\u975eVIP\uff09"}, "quality": "standard", "id": "msg_1789568699254"}, error: Expecting value: line 1 column 2 (char 1) [2026-09-16 22:25:29] [0.6.1] [ERROR] online_music.py:1620: Plugin QQ音乐 (非VIP) get_media_source failed: Message msg_1789568699254 timeout [2026-09-16 22:25:29] [0.6.1] [WARNING] music.py:140: plugin-url 解析失败(链接为空): {'id': 97773, 'songmid': '0039MnYb0qxYhV', 'title': '晴天', 'artist': '周杰伦', 'artwork': 'https://y.gtimg.cn/music/photo_new/T002R300x300M000000MkMni19ClKG.jpg', 'album': '叶惠美', 'albumid': 8220, 'albummid': '000MkMni19ClKG', 'isfree': True, 'platform': 'QQ音乐 (非VIP)'} [2026-09-16 22:25:29] [0.6.1] [WARNING] device_player.py:564: 探路超时或网络异常(插件解析失败): [2026-09-16 22:25:29] [0.6.1] [WARNING] device_player.py:570: 当前连续失败次数: 5 [2026-09-16 22:25:29] [0.6.1] [ERROR] device_player.py:573: 连续 5 次获取歌曲死链,触发系统第二层熔断保护! [2026-09-16 22:25:29] [0.6.1] [INFO] xiaomusic.py:759: 触发全局 TTS 报错: 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 22:25:29] [0.6.1] [INFO] device_player.py:679: try do_tts value:连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 22:25:29] [0.6.1] [INFO] device_player.py:919: _text_to_speech_edge_tts 连续多次获取歌曲失败,已为您停止播放。 [2026-09-16 22:25:29] [0.6.1] [INFO] device_player.py:928: 使用 edge-tts 生成语音: 连续多次获取歌曲失败,已为您停止播放。, voice: zh-CN-XiaoyiNeural [2026-09-16 22:25:29] [0.6.1] [INFO] device_player.py:936: edge-tts 生成的文件路径: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 22:25:29] [0.6.1] [INFO] music_library.py:1382: _get_file_url filepath:music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3, filename:tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 22:25:29] [0.6.1] [INFO] device_player.py:940: TTS 播放 URL: https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 22:25:29] [0.6.1] [INFO] file.py:1267: [proxy:f225c57c] final response status=404 resp_url=https://music.9996655.xyz/api/proxy/plugin-url?data=eyJpZCI6IDk3NzczLCAic29uZ21pZCI6ICIwMDM5TW5ZYjBxeFloViIsICJ0aXRsZSI6ICJcdTY2NzRcdTU5MjkiLCAiYXJ0aXN0IjogIlx1NTQ2OFx1Njc3MFx1NGYyNiIsICJhcnR3b3JrIjogImh0dHBzOi8veS5ndGltZy5jbi9tdXNpYy9waG90b19uZXcvVDAwMlIzMDB4MzAwTTAwMDAwME1rTW5pMTlDbEtHLmpwZyIsICJhbGJ1bSI6ICJcdTUzZjZcdTYwZTBcdTdmOGUiLCAiYWxidW1pZCI6IDgyMjAsICJhbGJ1bW1pZCI6ICIwMDBNa01uaTE5Q2xLRyIsICJpc2ZyZWUiOiB0cnVlLCAicGxhdGZvcm0iOiAiUVFcdTk3ZjNcdTRlNTAgXHVmZjA4XHU5NzVlVklQXHVmZjA5In0= content_type=application/json content_length=43 [2026-09-16 22:25:29] [0.6.1] [ERROR] file.py:1382: [proxy:f225c57c] unhandled proxy error: 404: 下载失败,状态码: 404 ValueError: 服务器返回状态码: 404 The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 1273, in _proxy_handler raise HTTPException( status_code=resp.status, detail=f"下载失败,状态码: {resp.status}" ) from status_exc fastapi.exceptions.HTTPException: 404: 下载失败,状态码: 404 [2026-09-16 22:25:30] [0.6.1] [INFO] command_handler.py:51: 收到消息:不要放了 控制面板:False did:2181600216 [2026-09-16 22:25:30] [0.6.1] [INFO] command_handler.py:156: 未匹配到指令 不要放了 False [2026-09-16 22:25:30] [0.6.1] [INFO] device_player.py:1142: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 52, "loop_type": 1, "media_type": 3, "play_song_detail": { "audio_id": "608141617723281", "position": 12181, "duration": 60029 }, "track_list": [ "608141617723281", "649438522090980309", "47723400956739600", "681130541622481", "426113172327794", "3391817455823224933", "295936492963889156", "1291934294152839594", "486195826588925", "1297863200260227264" ] }'}} [2026-09-16 22:25:30] [0.6.1] [INFO] device_player.py:1149: get_volume. volume:52 [2026-09-16 22:25:30] [0.6.1] [INFO] device_player.py:998: play_one_url continue_play device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 audio_id:436490277987655 [2026-09-16 22:25:30] [0.6.1] [INFO] device_player.py:986: group_player_play https://music.9996655.xyz:443/music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-09-16 22:25:30] [0.6.1] [INFO] music_utils.py:270: 待执行的完整命令 ffprobe command: ./ffmpeg/bin/ffprobe -v error -show_entries format=duration -of json music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 22:25:30] [0.6.1] [INFO] music_utils.py:281: 命令执行结果 command result - return code: 0, stdout: { "format": { "duration": "4.608000" } } [2026-09-16 22:25:30] [0.6.1] [INFO] music_utils.py:290: Successfully extracted duration: 4.608 seconds for file: music/tmp/2c02edd21ecf72e5557ce4750718ce3f.mp3 [2026-09-16 22:25:30] [0.6.1] [INFO] device_player.py:947: TTS 音频时长: 4.608 秒 [2026-09-16 22:25:30] [0.6.1] [INFO] device_player.py:972: 已设置 TTS 定时器,4.608 秒后停止 [2026-09-16 22:25:31] [0.6.1] [INFO] device_player.py:733: Process exited with returncode:0 [2026-09-16 22:25:31] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 22:25:36] [0.6.1] [INFO] device_player.py:690: do_tts ok. cur_music:晴天-周杰伦 [2026-09-16 22:25:36] [0.6.1] [INFO] device_player.py:733: Process exited with returncode:0 [2026-09-16 22:25:36] [0.6.1] [INFO] device_player.py:793: 继续播放歌曲. self.config.continue_play:True [2026-09-16 22:25:37] [0.6.1] [INFO] device_player.py:956: TTS 播放定时器时间到 [2026-09-16 22:25:37] [0.6.1] [INFO] device_player.py:1246: cancel_group_next_timer {'2181600216': } [2026-09-16 22:25:37] [0.6.1] [INFO] device_player.py:1231: cancel_next_timer did: 2181600216 [2026-09-16 22:25:37] [0.6.1] [INFO] device_player.py:1241: 下一曲定时器不见了 did: 2181600216 [2026-09-16 22:25:37] [0.6.1] [INFO] device_player.py:1206: group_force_stop_xiaoai Xiaomi 智能音箱 Pro ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [2026-09-16 22:25:39] [0.6.1] [INFO] device_player.py:697: force_stop_xiaoai player_pause device_id:02b2adf4-4fad-42ed-a30f-38072ff7b951 ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-09-16 22:25:39] [0.6.1] [INFO] device_player.py:709: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 2, "volume": 52, "loop_type": 1, "media_type": 3, "play_song_detail": { "audio_id": "436490277987655", "position": 1297, "duration": 4608 }, "track_list": [ "436490277987655" ] }'}} [2026-09-16 22:25:39] [0.6.1] [INFO] device_player.py:1209: group_force_stop_xiaoai ['02b2adf4-4fad-42ed-a30f-38072ff7b951'] [None] [2026-09-16 22:25:39] [0.6.1] [INFO] device_player.py:1199: stop now [2026-09-16 22:55:22] [0.6.1] [WARNING] conversation.py:181: Execption [2026-09-16 22:58:59] [0.6.1] [WARNING] conversation.py:181: Execption