├── README.md ├── Huibq.js ├── 梓澄公益音源.js ├── 梓橙公益音源2代.js ├── nya.js ├── 梓澄qwq的音源(网易云不保证稳定性).js ├── 野草音源.js ├── grass音源_仅支持酷我.js ├── 野花音源.js ├── flower音源_1.0.0.js ├── ikun音源-HK.js ├── grass-v1.js ├── flower-v1.js ├── lx-music-source-free.js ├── 肥猫不肥.js ├── ikun-source.js ├── 长青SVIP音源v1.0.0(支持无损).js ├── 聚合API接口.js └── lx-music-source.js /README.md: -------------------------------------------------------------------------------- 1 | # Lxmusic 2 | 洛雪音乐-音源 3 | 洛雪软件 https://github.com/lyswhut/lx-music-desktop/releases 4 | 5 | 均收集自开放网络,不对音源稳定性,可用性,时效性提供任何保证。 6 | ------- 7 | 8 | 部分音源仅适用于v.2.5.0以下; 部分适用于v2.6.0以上 9 | 10 | 如果版本不对应,则可能导致“初始化失败” 11 | 12 | 六音音源:v1.1.0版本后已经移除了网易云的支持,且仅支持洛雪PC端v2.6.0/移动端v1.2.0及以后的版本 13 | 14 | 15 | 建议全部导入,自行测试不同音源与不同音乐平台之间的关系。 16 | 17 | 部分音源+平台,可最高支持到“FLAC无损音质”。 18 | 19 | 20 | 21 | 22 | # MusicFree 23 | MusicFree-音源 24 | 软件地址 https://github.com/maotoumao/MusicFree/releases 25 | 26 | 以下音源均收集自开放网络,不对音源稳定性,可用性,时效性提供任何保证。 27 | ------- 28 | 29 | 30 | 在线插件(从网络安装插件): https://www.imwzh.com/musicfree.json 31 | 已整理合并以下大佬的源。 32 | 33 | 整合后插件本地包(同以上在线插件):https://wwfo.lanzoue.com/i933R31kewcd 34 | 35 | 其中,元力源最高支持到wy无损: https://13413.kstore.vip/yuanli/%E5%85%83%E5%8A%9B%E9%9F%B3%E4%B9%90.json 36 | 37 | ------- 38 | 作者: https://gitee.com/maotoumao/MusicFreePlugins/raw/master/plugins.json 39 | 40 | 种子: https://gitee.com/kevinr/tvbox/raw/master/musicfree/plugins/zz.js 41 | 42 | 无邪: https://gitee.com/wxej/yy/raw/master/MusicFree.json 43 | 44 | 彩桐: http://cdn.teyonds.com/music/plugins.json 45 | 46 | 小秋: http://music.haitangw.net/cqapi/qq.js 47 | 48 | Huibq https://fastly.jsdelivr.net/gh/Huibq/keep-alive/Music_Free/xiaoyun.js 49 | 50 | ------- 51 | 52 | 53 | # 部分平台解析下载方式 (仅供参考) 54 | 55 | 如果不想用三方端,仅仅是**下载**某几首,可以临时使用一些解析站点,以下从优到低 56 | 57 | 58 | 59 | 以下是一些整理出来的方案: 60 | 61 | ### 部分无损下载 62 | 63 | https://tidal.qqdl.site/ 64 | 65 | 无需梯子,可直接搜索下载无损版 66 | 67 | 68 | ### 适用于亚马x等平台的无损解析 69 | 70 | https://doubledouble.top/ 71 | 72 | 最高支持到FLAC(注:此平台由原站 ~~https://lucida.su/~~ 进化而来,该平台支持站点较多,其他请自测) 73 | 74 | ### 适用于声破T等平台的解析 75 | 76 | https://spotdownloader.com/ 77 | 78 | 推荐此渠道,最高支持到320kbps 79 | 80 | 备用(音质相对于上个渠道较差):https://spotimate.io/ 81 | 82 | ### 适用于油吐B平台的解析 83 | 84 | https://mp3yt.is/ 85 | 86 | 能支持到320kbps 87 | 88 | ### 适用于国内平台 89 | 90 | https://www.flac.life/ 91 | 92 | 经测试,基本确认调用的酷W的,最高支持FLAC。网抑Y的就放弃此渠道吧 93 | 94 | ### 其他边角料 95 | 96 | https://musicjx.com/ 97 | 98 | http://www.xmsj.org/ 99 | 100 | 搜索多站合一音乐搜索,就会出来一大堆,此源码来自于 https://github.com/maicong/music ,已停止更新 101 | 102 | 后有其他人发布修复版 https://blog.cccyun.cn/post-314.html 其演示站 http://music.hi.cn/ 目测也是多年前就停更 103 | 104 | 此类均调用官方接口,也就是说官方有试听这里即使下载完成也仅有试听片段~ 同理,安装个IDM也能抓到下载试听…… 105 | 106 | 解解馋得了。 107 | 108 | ### 解锁器 109 | 110 | http://unlock.music.hi.cn/ 111 | 112 | 懂的都懂,不再介绍。 113 | 114 | ![](https://raw.githubusercontent.com/hiboxs/a/main/image.png) 115 | -------------------------------------------------------------------------------- /Huibq.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name Huibq_lxmusic源 3 | * @description Github搜索“洛雪音乐音源”,禁止批量下载! 4 | * @version v1.2.0 5 | * @author Huibq 6 | */ 7 | const DEV_ENABLE = false 8 | const API_URL = 'https://lxmusicapi.onrender.com' 9 | const API_KEY = 'share-v2' 10 | const MUSIC_QUALITY = { 11 | kw: ['128k', '320k'], 12 | kg: ['128k', '320k'], 13 | tx: ['128k', '320k'], 14 | wy: ['128k', '320k'], 15 | mg: ['128k', '320k'], 16 | } 17 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 18 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 19 | const httpFetch = (url, options = { method: 'GET' }) => { 20 | return new Promise((resolve, reject) => { 21 | request(url, options, (err, resp) => { 22 | if (err) return reject(err) 23 | resolve(resp) 24 | }) 25 | }) 26 | } 27 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 28 | const songId = musicInfo.hash ?? musicInfo.songmid 29 | 30 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 31 | method: 'GET', 32 | headers: { 33 | 'Content-Type': 'application/json', 34 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-usic-request/${version}`}`, 35 | 'X-Request-Key': API_KEY, 36 | }, 37 | }) 38 | const { body } = request 39 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 40 | switch (body.code) { 41 | case 0: 42 | return body.url 43 | case 1: 44 | throw new Error('block ip') 45 | case 2: 46 | throw new Error('get music url failed') 47 | case 4: 48 | throw new Error('internal server error') 49 | case 5: 50 | throw new Error('too many requests') 51 | case 6: 52 | throw new Error('param error') 53 | default: 54 | throw new Error(body.msg ?? 'unknow error') 55 | } 56 | } 57 | const musicSources = {} 58 | MUSIC_SOURCE.forEach(item => { 59 | musicSources[item] = { 60 | name: item, 61 | type: 'music', 62 | actions: ['musicUrl'], 63 | qualitys: MUSIC_QUALITY[item], 64 | } 65 | }) 66 | on(EVENT_NAMES.request, ({ action, source, info }) => { 67 | switch (action) { 68 | case 'musicUrl': 69 | if (env != 'mobile') { 70 | console.group(`Handle Action(musicUrl)`) 71 | console.log('source', source) 72 | console.log('quality', info.type) 73 | console.log('musicInfo', info.musicInfo) 74 | console.groupEnd() 75 | } else { 76 | console.log(`Handle Action(musicUrl)`) 77 | console.log('source', source) 78 | console.log('quality', info.type) 79 | console.log('musicInfo', info.musicInfo) 80 | } 81 | return handleGetMusicUrl(source, info.musicInfo, info.type) 82 | .then(data => Promise.resolve(data)) 83 | .catch(err => Promise.reject(err)) 84 | default: 85 | console.error(`action(${action}) not support`) 86 | return Promise.reject('action not support') 87 | } 88 | }) 89 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) -------------------------------------------------------------------------------- /梓澄公益音源.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name 梓澄公益音源 3 | * @description 合理使用,谢谢 4 | * @version v1.0.1 5 | * @author Folltoshe & helloplhm-qwq 6 | * @repository https://github.com/lxmusics/lx-music-api-server 7 | */ 8 | 9 | // 不要再有傻卵给我把源名和介绍改了拿去赚钱 10 | // 发现了停服务器,谁都别用了 11 | // 发公众号一类也一样,自己甄别 12 | // 不要搞得大家都用不了,我也不开心 13 | 14 | // 是否开启开发模式 15 | const DEV_ENABLE = true 16 | // 服务端地址 17 | const API_URL = 'http://43.248.185.248:9763' 18 | // 服务端配置的请求key 19 | const API_KEY = 'lxmusicisyyds' 20 | // 音质配置(key为音源名称,不要乱填.如果你账号为VIP可以填写到hires) 21 | const MUSIC_QUALITY = { 22 | kw: ['128k', "320k"], 23 | kg: ['128k', "320k"], 24 | tx: ['128k', "320k"], 25 | wy: ['128k', "320k"], 26 | mg: ['128k', "320k"], 27 | } 28 | // 音源配置(默认为自动生成,可以修改为手动) 29 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 30 | 31 | /** 32 | * 下面的东西就不要修改了 33 | */ 34 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 35 | 36 | const httpFetch = (url, options = { method: 'GET' }) => { 37 | return new Promise((resolve, reject) => { 38 | request(url, options, (err, resp) => { 39 | if (err) return reject(err) 40 | resolve(resp) 41 | }) 42 | }) 43 | } 44 | 45 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 46 | const songId = musicInfo.hash ?? musicInfo.songmid 47 | 48 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 49 | method: 'GET', 50 | headers: { 51 | 'Content-Type': 'application/json', 52 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-usic-request/${version}`}`, 53 | 'X-Request-Key': API_KEY, 54 | }, 55 | }) 56 | const { body } = request 57 | 58 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 59 | 60 | switch (body.code) { 61 | case 0: 62 | return body.data 63 | case 1: 64 | throw new Error('block ip') 65 | case 2: 66 | throw new Error('get music url failed') 67 | case 4: 68 | throw new Error('internal server error') 69 | case 5: 70 | throw new Error('too many requests') 71 | case 5: 72 | throw new Error('param error') 73 | default: 74 | throw new Error(body.msg ?? 'unknow error') 75 | } 76 | } 77 | 78 | const musicSources = {} 79 | MUSIC_SOURCE.forEach(item => { 80 | musicSources[item] = { 81 | name: item, 82 | type: 'music', 83 | actions: ['musicUrl'], 84 | qualitys: MUSIC_QUALITY[item], 85 | } 86 | }) 87 | 88 | on(EVENT_NAMES.request, ({ action, source, info }) => { 89 | switch (action) { 90 | case 'musicUrl': 91 | console.log('source', source) 92 | console.log('quality', info.type) 93 | console.log('musicInfo', info.musicInfo) 94 | return handleGetMusicUrl(source, info.musicInfo, info.type) 95 | .then(data => Promise.resolve(data)) 96 | .catch(err => Promise.reject(err)) 97 | default: 98 | console.error(`action(${action}) not support`) 99 | return Promise.reject('action not support') 100 | } 101 | }) 102 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) 103 | -------------------------------------------------------------------------------- /梓橙公益音源2代.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name 梓澄公益音源二代 3 | * @description 摆烂了,随便你们吧,反正这个没有账号 4 | * @version 1.2.3.4.5 5 | * @author helloplhm-qwq & Folltoshe 6 | * @repository https://github.com/lxmusics/lx-music-api-server 7 | */ 8 | 9 | // 是否开启开发模式 10 | const DEV_ENABLE = false 11 | // 服务端地址 12 | const API_URL = "http://103.239.247.51:9763" 13 | // 服务端配置的请求key 14 | const API_KEY = "114514" 15 | // 音质配置(key为音源名称,不要乱填.如果你账号为VIP可以填写到hires) 16 | // 全部的支持值: ['128k', '320k', 'flac', 'flac24bit'] 17 | const MUSIC_QUALITY = JSON.parse('{"kw":["128k","320k","flac"],"kg":["128k"],"tx":["128k"],"wy":["128k"],"mg":["128k"]}') 18 | // 音源配置(默认为自动生成,可以修改为手动) 19 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 20 | 21 | /** 22 | * 下面的东西就不要修改了 23 | */ 24 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 25 | 26 | const httpFetch = (url, options = { method: 'GET' }) => { 27 | return new Promise((resolve, reject) => { 28 | console.log('--- start --- ' + url) 29 | request(url, options, (err, resp) => { 30 | if (err) return reject(err) 31 | console.log('API Response: ', resp) 32 | resolve(resp) 33 | }) 34 | }) 35 | } 36 | 37 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 38 | const songId = musicInfo.hash ?? musicInfo.songmid 39 | 40 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 41 | method: 'GET', 42 | headers: { 43 | 'Content-Type': 'application/json', 44 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 45 | 'X-Request-Key': API_KEY, 46 | }, 47 | }) 48 | const { body } = request 49 | 50 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 51 | 52 | switch (body.code) { 53 | case 0: 54 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) success, URL: ${body.data}`) 55 | return body.data 56 | case 1: 57 | throw new Error('block ip') 58 | case 2: 59 | throw new Error('get music url failed') 60 | case 4: 61 | throw new Error('internal server error') 62 | case 5: 63 | throw new Error('too many requests') 64 | case 6: 65 | throw new Error('param error') 66 | default: 67 | throw new Error(body.msg ?? 'unknow error') 68 | } 69 | } 70 | 71 | const musicSources = {} 72 | MUSIC_SOURCE.forEach(item => { 73 | musicSources[item] = { 74 | name: item, 75 | type: 'music', 76 | actions: ['musicUrl'], 77 | qualitys: MUSIC_QUALITY[item], 78 | } 79 | }) 80 | 81 | on(EVENT_NAMES.request, ({ action, source, info }) => { 82 | switch (action) { 83 | case 'musicUrl': 84 | if (env != 'mobile') { 85 | console.group(`Handle Action(musicUrl)`) 86 | console.log('source', source) 87 | console.log('quality', info.type) 88 | console.log('musicInfo', info.musicInfo) 89 | console.groupEnd() 90 | } else { 91 | console.log(`Handle Action(musicUrl)`) 92 | console.log('source', source) 93 | console.log('quality', info.type) 94 | console.log('musicInfo', info.musicInfo) 95 | } 96 | return handleGetMusicUrl(source, info.musicInfo, info.type) 97 | .then(data => Promise.resolve(data)) 98 | .catch(err => Promise.reject(err)) 99 | default: 100 | console.error(`action(${action}) not support`) 101 | return Promise.reject('action not support') 102 | } 103 | }) 104 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) 105 | -------------------------------------------------------------------------------- /nya.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name 示例音源 3 | * @description Nya~ 4 | * @version 0.0.1 5 | * @author 6 | * @repository https://github.com/lxmusics/lx-music-api-server 7 | */ 8 | 9 | // 是否开启开发模式 10 | const DEV_ENABLE = false 11 | // 服务端地址 12 | const API_URL = "http://103.40.13.21:9866" 13 | // 服务端配置的请求key 14 | const API_KEY = "nya" 15 | // 音质配置(key为音源名称,不要乱填.如果你账号为VIP可以填写到hires) 16 | // 全部的支持值: ['128k', '320k', 'flac', 'flac24bit'] 17 | const MUSIC_QUALITY = JSON.parse('{"kw":["128k","320k","flac","flac24bit"],"kg":["128k"],"tx":["128k","320k","flac","flac24bit"],"wy":["128k","320k","flac","flac24bit"],"mg":["128k"]}') 18 | // 音源配置(默认为自动生成,可以修改为手动) 19 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 20 | 21 | /** 22 | * 下面的东西就不要修改了 23 | */ 24 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 25 | 26 | /** 27 | * URL请求 28 | * 29 | * @param {string} url - 请求的地址 30 | * @param {object} options - 请求的配置文件 31 | * @return {Promise} 携带响应体的Promise对象 32 | */ 33 | const httpFetch = (url, options = { method: 'GET' }) => { 34 | return new Promise((resolve, reject) => { 35 | console.log('--- start --- ' + url) 36 | request(url, options, (err, resp) => { 37 | if (err) return reject(err) 38 | console.log('API Response: ', resp) 39 | resolve(resp) 40 | }) 41 | }) 42 | } 43 | 44 | /** 45 | * 46 | * @param {string} source - 音源 47 | * @param {object} musicInfo - 歌曲信息 48 | * @param {string} quality - 音质 49 | * @returns {Promise} - 歌曲播放链接 50 | * @throws {Error} - 错误消息 51 | */ 52 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 53 | const songId = musicInfo.hash ?? musicInfo.songmid 54 | 55 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 56 | method: 'GET', 57 | headers: { 58 | 'Content-Type': 'application/json', 59 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 60 | 'X-Request-Key': API_KEY, 61 | }, 62 | follow_max: 5, 63 | }) 64 | const { body } = request 65 | 66 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 67 | if (env != 'mobile') console.groupEnd() 68 | switch (body.code) { 69 | case 0: 70 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) success, URL: ${body.data}`) 71 | return body.data 72 | case 1: 73 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed: ip被封禁`) 74 | throw new Error('block ip') 75 | case 2: 76 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg}`) 77 | throw new Error('get music url failed') 78 | case 4: 79 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 远程服务器错误`) 80 | throw new Error('internal server error') 81 | case 5: 82 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求过于频繁,请休息一下吧`) 83 | throw new Error('too many requests') 84 | case 6: 85 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求参数错误`) 86 | throw new Error('param error') 87 | default: 88 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg ? body.msg : 'unknow error'}`) 89 | throw new Error(body.msg ?? 'unknow error') 90 | } 91 | } 92 | 93 | // 生成歌曲信息 94 | const musicSources = {} 95 | MUSIC_SOURCE.forEach(item => { 96 | musicSources[item] = { 97 | name: item, 98 | type: 'music', 99 | actions: ['musicUrl'], 100 | qualitys: MUSIC_QUALITY[item], 101 | } 102 | }) 103 | 104 | // 监听 LX Music 请求事件 105 | on(EVENT_NAMES.request, ({ action, source, info }) => { 106 | switch (action) { 107 | case 'musicUrl': 108 | if (env != 'mobile') { 109 | console.group(`Handle Action(musicUrl)`) 110 | console.log('source', source) 111 | console.log('quality', info.type) 112 | console.log('musicInfo', info.musicInfo) 113 | } else { 114 | console.log(`Handle Action(musicUrl)`) 115 | console.log('source', source) 116 | console.log('quality', info.type) 117 | console.log('musicInfo', info.musicInfo) 118 | } 119 | return handleGetMusicUrl(source, info.musicInfo, info.type) 120 | .then(data => Promise.resolve(data)) 121 | .catch(err => Promise.reject(err)) 122 | default: 123 | console.error(`action(${action}) not support`) 124 | return Promise.reject('action not support') 125 | } 126 | }) 127 | 128 | // 向 LX Music 发送初始化成功事件 129 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) 130 | -------------------------------------------------------------------------------- /梓澄qwq的音源(网易云不保证稳定性).js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name 示例音源 3 | * @description Nya~ 4 | * @version 0.0.1 5 | * @author 6 | * @repository https://github.com/lxmusics/lx-music-api-server 7 | */ 8 | 9 | // 是否开启开发模式 10 | const DEV_ENABLE = false 11 | // 服务端地址 12 | const API_URL = "http://103.40.13.21:9866" 13 | // 服务端配置的请求key 14 | const API_KEY = "nya" 15 | // 音质配置(key为音源名称,不要乱填.如果你账号为VIP可以填写到hires) 16 | // 全部的支持值: ['128k', '320k', 'flac', 'flac24bit'] 17 | const MUSIC_QUALITY = JSON.parse('{"kw":["128k","320k","flac","flac24bit"],"kg":["128k"],"tx":["128k","320k","flac","flac24bit"],"wy":["128k","320k","flac","flac24bit"],"mg":["128k"]}') 18 | // 音源配置(默认为自动生成,可以修改为手动) 19 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 20 | 21 | /** 22 | * 下面的东西就不要修改了 23 | */ 24 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 25 | 26 | /** 27 | * URL请求 28 | * 29 | * @param {string} url - 请求的地址 30 | * @param {object} options - 请求的配置文件 31 | * @return {Promise} 携带响应体的Promise对象 32 | */ 33 | const httpFetch = (url, options = { method: 'GET' }) => { 34 | return new Promise((resolve, reject) => { 35 | console.log('--- start --- ' + url) 36 | request(url, options, (err, resp) => { 37 | if (err) return reject(err) 38 | console.log('API Response: ', resp) 39 | resolve(resp) 40 | }) 41 | }) 42 | } 43 | 44 | /** 45 | * 46 | * @param {string} source - 音源 47 | * @param {object} musicInfo - 歌曲信息 48 | * @param {string} quality - 音质 49 | * @returns {Promise} - 歌曲播放链接 50 | * @throws {Error} - 错误消息 51 | */ 52 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 53 | const songId = musicInfo.hash ?? musicInfo.songmid 54 | 55 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 56 | method: 'GET', 57 | headers: { 58 | 'Content-Type': 'application/json', 59 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 60 | 'X-Request-Key': API_KEY, 61 | }, 62 | follow_max: 5, 63 | }) 64 | const { body } = request 65 | 66 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 67 | if (env != 'mobile') console.groupEnd() 68 | switch (body.code) { 69 | case 0: 70 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) success, URL: ${body.data}`) 71 | return body.data 72 | case 1: 73 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed: ip被封禁`) 74 | throw new Error('block ip') 75 | case 2: 76 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg}`) 77 | throw new Error('get music url failed') 78 | case 4: 79 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 远程服务器错误`) 80 | throw new Error('internal server error') 81 | case 5: 82 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求过于频繁,请休息一下吧`) 83 | throw new Error('too many requests') 84 | case 6: 85 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求参数错误`) 86 | throw new Error('param error') 87 | default: 88 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg ? body.msg : 'unknow error'}`) 89 | throw new Error(body.msg ?? 'unknow error') 90 | } 91 | } 92 | 93 | // 生成歌曲信息 94 | const musicSources = {} 95 | MUSIC_SOURCE.forEach(item => { 96 | musicSources[item] = { 97 | name: item, 98 | type: 'music', 99 | actions: ['musicUrl'], 100 | qualitys: MUSIC_QUALITY[item], 101 | } 102 | }) 103 | 104 | // 监听 LX Music 请求事件 105 | on(EVENT_NAMES.request, ({ action, source, info }) => { 106 | switch (action) { 107 | case 'musicUrl': 108 | if (env != 'mobile') { 109 | console.group(`Handle Action(musicUrl)`) 110 | console.log('source', source) 111 | console.log('quality', info.type) 112 | console.log('musicInfo', info.musicInfo) 113 | } else { 114 | console.log(`Handle Action(musicUrl)`) 115 | console.log('source', source) 116 | console.log('quality', info.type) 117 | console.log('musicInfo', info.musicInfo) 118 | } 119 | return handleGetMusicUrl(source, info.musicInfo, info.type) 120 | .then(data => Promise.resolve(data)) 121 | .catch(err => Promise.reject(err)) 122 | default: 123 | console.error(`action(${action}) not support`) 124 | return Promise.reject('action not support') 125 | } 126 | }) 127 | 128 | // 向 LX Music 发送初始化成功事件 129 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) 130 | -------------------------------------------------------------------------------- /野草音源.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @name 野草🌾 3 | * @version 1.0.0 4 | */ 5 | function Z(Y,L){const K=O();return Z=function(U,H){U=U-(-0x42*0x37+-0x4*-0x21e+0x704);let S=K[U];return S;},Z(Y,L);}function O(){const n=['\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x49','\x69\x6e\x69\x74\x65\x64','\x35\x53\x41\x56\x79\x6d\x5a','\x69\x63\x73\x2e\x74\x6b\x2f\x76\x31','\u670d\u52a1\u5668\u5f02\u5e38','\x63\x72\x79\x70\x74\x6f','\x53\x4f\x53\x4c\x6d','\x47\x45\x54','\x35\x32\x30\x34\x30\x32\x38\x6c\x59\x4e\x54\x76\x7a','\x6d\x75\x73\x69\x63','\x4a\x71\x48\x59\x51','\x73\x6f\x6e\x67\x6d\x69\x64','\x39\x31\x37\x31\x34\x33\x38\x55\x53\x59\x70\x77\x52','\x69\x63\x73\x2e\x74\x6b\x2f\x76\x31\x2f','\x74\x48\x42\x63\x6f','\x42\x43\x6b\x53\x46','\x70\x54\x70\x4e\x6c','\x6c\x76\x7a\x44\x71','\x62\x75\x66\x54\x6f\x53\x74\x72\x69\x6e','\x32\x32\x31\x32\x39\x33\x36\x63\x54\x74\x59\x4a\x61','\x67\x44\x69\x63\x7a','\x68\x74\x74\x70\x3a\x2f\x2f\x67\x72\x61','\x74\x55\x75\x70\x54','\x66\x72\x6f\x6d','\x65\x57\x54\x61\x70','\x73\x68\x69\x66\x74','\x75\x70\x64\x61\x74\x65\x41\x6c\x65\x72','\x2f\x75\x72\x6c\x2f','\x76\x65\x72\x73\x69\x6f\x6e','\x47\x44\x6d\x59\x70','\x73\x73\x2e\x74\x65\x6d\x70\x6d\x75\x73','\x72\x65\x71\x75\x65\x73\x74','\x32\x30\x56\x54\x67\x61\x57\x6d','\x57\x72\x58\x55\x4e','\x75\x72\x6c\x69\x6e\x66\x6f\x2f','\x72\x61\x77\x53\x63\x72\x69\x70\x74','\x74\x72\x69\x6d','\x74\x61\x67','\x73\x70\x6c\x69\x74','\x68\x65\x78','\x38\x35\x33\x32\x30\x58\x59\x41\x55\x43\x58','\x57\x71\x54\x59\x55','\x32\x36\x31\x6a\x76\x41\x43\x70\x73','\x50\x6b\x63\x5a\x4c','\x6d\x75\x73\x69\x63\x55\x72\x6c','\x68\x61\x73\x68','\x64\x61\x74\x61','\x56\x76\x47\x70\x5a','\x6d\x73\x67','\x34\x36\x32\x35\x33\x31\x46\x62\x4b\x66\x4f\x64','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x53\x48\x76\x46\x71','\x62\x75\x66\x66\x65\x72','\x6d\x61\x74\x63\x68','\x66\x61\x69\x6c\x65\x64','\x42\x54\x4a\x75\x6f','\x62\x6f\x64\x79','\x7a\x4f\x64\x77\x68','\x6c\x78\x2d\x6d\x75\x73\x69\x63\x2f','\x4d\x59\x64\x72\x70','\x66\x6b\x6b\x6c\x54','\x31\x55\x48\x48\x71\x43\x59','\x66\x69\x61\x6c\x65\x64','\x33\x31\x30\x36\x33\x30\x32\x56\x5a\x62\x47\x73\x68','\x63\x6f\x64\x65','\x73\x6f\x75\x72\x63\x65\x73','\x6b\x77\x7c\x31\x32\x38\x6b','\x70\x6d\x79\x45\x64','\x6d\x64\x35','\x49\x46\x6b\x53\x52','\x36\x30\x32\x37\x38\x35\x34\x4d\x4b\x76\x54\x48\x63'];O=function(){return n;};return O();}const k=Z;(function(Y,L){const P={Y:0x17f,L:0x181,K:0x173,U:'\x30\x78\x31\x39\x31',H:0x18b,S:'\x30\x78\x31\x34\x65',N:'\x30\x78\x31\x38\x38',B:0x16a,v:'\x30\x78\x31\x36\x63',G:0x162,M:0x155},A=Z,K=Y();while(!![]){try{const U=-parseInt(A(P.Y))/(0x1*-0xc89+0x1*-0x74f+0x13d9)*(-parseInt(A(P.L))/(0x15f5+0x100f+0x3cd*-0xa))+parseInt(A(P.K))/(-0xe41+-0x17f5+-0x203*-0x13)+-parseInt(A(P.U))/(-0x2*-0x139+-0x21f*0x9+0x10a9)+parseInt(A(P.H))/(-0x1*0xa7b+0x1*-0x1bdd+-0x1ab*-0x17)*(parseInt(A(P.S))/(-0x766+-0x7a5+0x1d*0x85))+-parseInt(A(P.N))/(0x1095+-0xaf8*-0x2+-0x267e*0x1)+parseInt(A(P.B))/(-0x22f3+0x18e*0x9+0x14fd)*(parseInt(A(P.v))/(0x4f4*0x1+-0x1279*-0x2+-0x5fb*0x7))+parseInt(A(P.G))/(-0xcb6+-0x1*0x1bb3+-0x817*-0x5)*(-parseInt(A(P.M))/(-0x1*-0x26d+-0x1*-0x260a+-0x286c));if(U===L)break;else K['push'](K['shift']());}catch(H){K['push'](K['shift']());}}}(O,-0x1*0x188843+-0x9728b+0x30f1af));const {EVENT_NAMES:e,request:t,on:r,send:s,env:o,version:d,currentScriptInfo:i,utils:a}=globalThis['\x6c\x78'],getId=(Y,L)=>{const w={Y:'\x30\x78\x31\x37\x38',L:'\x30\x78\x31\x39\x34',K:0x16f,U:0x189,H:'\x30\x78\x31\x35\x33',S:'\x30\x78\x31\x36\x64'},I=Z,K={'\x6c\x76\x7a\x44\x71':function(U,H){return U(H);},'\x50\x6b\x63\x5a\x4c':I(w.Y)};switch(Y){case'\x74\x78':case'\x77\x79':case'\x6b\x77':return L[I(w.L)];case'\x6b\x67':return L[I(w.K)];case'\x6d\x67':return L[I(w.U)+'\x64'];}throw K[I(w.H)](Error,K[I(w.S)]);},headers={'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':k('\x30\x78\x31\x37\x63')+o,'\x76\x65\x72':d,'\x73\x6f\x75\x72\x63\x65\x2d\x76\x65\x72':i[k(0x15e)]};r(e[k('\x30\x78\x31\x36\x31')],({source:Y,action:L,info:{musicInfo:K,type:U}})=>{const J={Y:0x169,L:0x157,K:0x160,U:'\x30\x78\x31\x38\x63',H:0x190,S:0x16e,N:0x180,B:0x17d,v:0x171,G:0x150,M:0x152},g={Y:'\x30\x78\x31\x35\x64',L:0x151,K:0x167,U:'\x30\x78\x31\x37\x36',H:0x154,S:0x176,N:'\x30\x78\x31\x35\x39',B:'\x30\x78\x31\x37\x34',v:0x177,G:'\x30\x78\x31\x37\x35',M:'\x30\x78\x31\x35\x36',T:'\x30\x78\x31\x36\x33',E:0x179,J:'\x30\x78\x31\x37\x65'},x=k,H={'\x42\x43\x6b\x53\x46':function(S,N,B){return S(N,B);},'\x53\x48\x76\x46\x71':x(J.Y),'\x67\x44\x69\x63\x7a':function(S,N,B,v){return S(N,B,v);},'\x57\x72\x58\x55\x4e':function(S,N){return S+N;},'\x42\x54\x4a\x75\x6f':x(J.L)+x(J.K)+x(J.U),'\x66\x6b\x6b\x6c\x54':x(J.H),'\x4d\x59\x64\x72\x70':function(S,N){return S!=N;},'\x56\x76\x47\x70\x5a':x(J.S),'\x74\x48\x42\x63\x6f':function(S,N){return S(N);},'\x70\x54\x70\x4e\x6c':x(J.N)};if(H[x(J.B)](H[x(J.v)],L))throw H[x(J.G)](Error,H[x(J.M)]);return new Promise((S,N)=>{const c=x;let B=c(g.Y)+Y+'\x2f'+H[c(g.L)](getId,Y,K)+'\x2f'+U;headers[c(g.K)]=a[c(g.U)][c(g.H)+'\x67'](a[c(g.S)][c(g.N)](JSON[c(g.B)](B[c(g.v)](/(?:\d\w)+/g),null,0x4fb+-0x44*-0x1f+-0x2*0x69b)),H[c(g.G)]),H[c(g.M)](t,H[c(g.T)](H[c(g.E)],B),{'\x6d\x65\x74\x68\x6f\x64':H[c(g.J)],'\x68\x65\x61\x64\x65\x72\x73':headers},(v,G)=>v?N(v):-0x13eb*-0x1+0x1*0x11c9+-0x25b4!==G[c('\x30\x78\x31\x37\x61')][c(0x182)]?N(Error(G[c('\x30\x78\x31\x37\x61')][c('\x30\x78\x31\x37\x32')])):void S(G[c('\x30\x78\x31\x37\x61')][c(0x170)]));});}),t(k(0x157)+k('\x30\x78\x31\x36\x30')+k('\x30\x78\x31\x34\x66')+k(0x164)+i[k(0x15e)],{'\x6d\x65\x74\x68\x6f\x64':k(0x190),'\x68\x65\x61\x64\x65\x72\x73':headers},(U,H)=>{const R={Y:0x184,L:0x18d,K:'\x30\x78\x31\x39\x32',U:'\x30\x78\x31\x36\x65',H:0x182,S:0x16b,N:'\x30\x78\x31\x37\x61',B:'\x30\x78\x31\x37\x62',v:0x17a,G:0x182,M:'\x30\x78\x31\x35\x38',T:0x18e,E:0x186,n:0x165,b:0x166,q:'\x30\x78\x31\x37\x61',X:'\x30\x78\x31\x39\x33',D:0x172,V:'\x30\x78\x31\x38\x35',h:0x166,O0:'\x30\x78\x31\x36\x38',O1:0x168,O2:0x15b,O3:'\x30\x78\x31\x35\x66',O4:0x18f,O5:0x183,O6:'\x30\x78\x31\x35\x61',O7:0x18a,O8:'\x30\x78\x31\x37\x61',O9:'\x30\x78\x31\x38\x37',OO:'\x30\x78\x31\x35\x63',OZ:0x17a},F=k,S={'\x57\x71\x54\x59\x55':F(R.Y),'\x7a\x4f\x64\x77\x68':function(M,T){return M!==T;},'\x74\x55\x75\x70\x54':function(M,T){return M!=T;},'\x4a\x71\x48\x59\x51':function(M,T){return M(T);},'\x70\x6d\x79\x45\x64':F(R.L),'\x47\x44\x6d\x59\x70':F(R.K),'\x53\x4f\x53\x4c\x6d':F(R.U),'\x65\x57\x54\x61\x70':function(M,T,E){return M(T,E);},'\x49\x46\x6b\x53\x52':function(M,T,E){return M(T,E);}},N={};N[F(R.H)]=0x0,N['\x73']=S[F(R.S)];const B={};B[F(R.N)]=N;if(U&&(H=B),S[F(R.B)](-0x19f8+0x1c51*-0x1+0x3649*0x1,H[F(R.v)][F(R.G)])||H[F(R.v)]['\x6d']&&S[F(R.M)](a[F(R.T)][F(R.E)](i[F(R.n)][F(R.b)]()),H[F(R.q)]['\x6d']))throw S[F(R.X)](Error,H[F(R.v)][F(R.D)]??S[F(R.V)]);let v={};for(let M of H[F(R.q)]['\x73'][F(R.h)]()[F(R.O0)]('\x26'))v[(M=M[F(R.O1)]('\x7c'))[F(R.O2)]()]={'\x74\x79\x70\x65':S[F(R.O3)],'\x61\x63\x74\x69\x6f\x6e\x73':[S[F(R.O4)]],'\x71\x75\x61\x6c\x69\x74\x79\x73':M};const G={};G[F(R.O5)]=v,(S[F(R.O6)](s,e[F(R.O7)],G),H[F(R.O8)]['\x75']&&S[F(R.O9)](s,e[F(R.OO)+'\x74'],{'\x6c\x6f\x67':H[F(R.OZ)]['\x75'],'\x75\x70\x64\x61\x74\x65\x55\x72\x6c':H[F(R.O8)]['\x68']}));}); 6 | -------------------------------------------------------------------------------- /grass音源_仅支持酷我.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @name 野草🌾 3 | * @version 1.0.0 4 | */ 5 | function Z(Y,L){const K=O();return Z=function(U,H){U=U-(-0x42*0x37+-0x4*-0x21e+0x704);let S=K[U];return S;},Z(Y,L);}function O(){const n=['\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x49','\x69\x6e\x69\x74\x65\x64','\x35\x53\x41\x56\x79\x6d\x5a','\x69\x63\x73\x2e\x74\x6b\x2f\x76\x31','\u670d\u52a1\u5668\u5f02\u5e38','\x63\x72\x79\x70\x74\x6f','\x53\x4f\x53\x4c\x6d','\x47\x45\x54','\x35\x32\x30\x34\x30\x32\x38\x6c\x59\x4e\x54\x76\x7a','\x6d\x75\x73\x69\x63','\x4a\x71\x48\x59\x51','\x73\x6f\x6e\x67\x6d\x69\x64','\x39\x31\x37\x31\x34\x33\x38\x55\x53\x59\x70\x77\x52','\x69\x63\x73\x2e\x74\x6b\x2f\x76\x31\x2f','\x74\x48\x42\x63\x6f','\x42\x43\x6b\x53\x46','\x70\x54\x70\x4e\x6c','\x6c\x76\x7a\x44\x71','\x62\x75\x66\x54\x6f\x53\x74\x72\x69\x6e','\x32\x32\x31\x32\x39\x33\x36\x63\x54\x74\x59\x4a\x61','\x67\x44\x69\x63\x7a','\x68\x74\x74\x70\x3a\x2f\x2f\x67\x72\x61','\x74\x55\x75\x70\x54','\x66\x72\x6f\x6d','\x65\x57\x54\x61\x70','\x73\x68\x69\x66\x74','\x75\x70\x64\x61\x74\x65\x41\x6c\x65\x72','\x2f\x75\x72\x6c\x2f','\x76\x65\x72\x73\x69\x6f\x6e','\x47\x44\x6d\x59\x70','\x73\x73\x2e\x74\x65\x6d\x70\x6d\x75\x73','\x72\x65\x71\x75\x65\x73\x74','\x32\x30\x56\x54\x67\x61\x57\x6d','\x57\x72\x58\x55\x4e','\x75\x72\x6c\x69\x6e\x66\x6f\x2f','\x72\x61\x77\x53\x63\x72\x69\x70\x74','\x74\x72\x69\x6d','\x74\x61\x67','\x73\x70\x6c\x69\x74','\x68\x65\x78','\x38\x35\x33\x32\x30\x58\x59\x41\x55\x43\x58','\x57\x71\x54\x59\x55','\x32\x36\x31\x6a\x76\x41\x43\x70\x73','\x50\x6b\x63\x5a\x4c','\x6d\x75\x73\x69\x63\x55\x72\x6c','\x68\x61\x73\x68','\x64\x61\x74\x61','\x56\x76\x47\x70\x5a','\x6d\x73\x67','\x34\x36\x32\x35\x33\x31\x46\x62\x4b\x66\x4f\x64','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x53\x48\x76\x46\x71','\x62\x75\x66\x66\x65\x72','\x6d\x61\x74\x63\x68','\x66\x61\x69\x6c\x65\x64','\x42\x54\x4a\x75\x6f','\x62\x6f\x64\x79','\x7a\x4f\x64\x77\x68','\x6c\x78\x2d\x6d\x75\x73\x69\x63\x2f','\x4d\x59\x64\x72\x70','\x66\x6b\x6b\x6c\x54','\x31\x55\x48\x48\x71\x43\x59','\x66\x69\x61\x6c\x65\x64','\x33\x31\x30\x36\x33\x30\x32\x56\x5a\x62\x47\x73\x68','\x63\x6f\x64\x65','\x73\x6f\x75\x72\x63\x65\x73','\x6b\x77\x7c\x31\x32\x38\x6b','\x70\x6d\x79\x45\x64','\x6d\x64\x35','\x49\x46\x6b\x53\x52','\x36\x30\x32\x37\x38\x35\x34\x4d\x4b\x76\x54\x48\x63'];O=function(){return n;};return O();}const k=Z;(function(Y,L){const P={Y:0x17f,L:0x181,K:0x173,U:'\x30\x78\x31\x39\x31',H:0x18b,S:'\x30\x78\x31\x34\x65',N:'\x30\x78\x31\x38\x38',B:0x16a,v:'\x30\x78\x31\x36\x63',G:0x162,M:0x155},A=Z,K=Y();while(!![]){try{const U=-parseInt(A(P.Y))/(0x1*-0xc89+0x1*-0x74f+0x13d9)*(-parseInt(A(P.L))/(0x15f5+0x100f+0x3cd*-0xa))+parseInt(A(P.K))/(-0xe41+-0x17f5+-0x203*-0x13)+-parseInt(A(P.U))/(-0x2*-0x139+-0x21f*0x9+0x10a9)+parseInt(A(P.H))/(-0x1*0xa7b+0x1*-0x1bdd+-0x1ab*-0x17)*(parseInt(A(P.S))/(-0x766+-0x7a5+0x1d*0x85))+-parseInt(A(P.N))/(0x1095+-0xaf8*-0x2+-0x267e*0x1)+parseInt(A(P.B))/(-0x22f3+0x18e*0x9+0x14fd)*(parseInt(A(P.v))/(0x4f4*0x1+-0x1279*-0x2+-0x5fb*0x7))+parseInt(A(P.G))/(-0xcb6+-0x1*0x1bb3+-0x817*-0x5)*(-parseInt(A(P.M))/(-0x1*-0x26d+-0x1*-0x260a+-0x286c));if(U===L)break;else K['push'](K['shift']());}catch(H){K['push'](K['shift']());}}}(O,-0x1*0x188843+-0x9728b+0x30f1af));const {EVENT_NAMES:e,request:t,on:r,send:s,env:o,version:d,currentScriptInfo:i,utils:a}=globalThis['\x6c\x78'],getId=(Y,L)=>{const w={Y:'\x30\x78\x31\x37\x38',L:'\x30\x78\x31\x39\x34',K:0x16f,U:0x189,H:'\x30\x78\x31\x35\x33',S:'\x30\x78\x31\x36\x64'},I=Z,K={'\x6c\x76\x7a\x44\x71':function(U,H){return U(H);},'\x50\x6b\x63\x5a\x4c':I(w.Y)};switch(Y){case'\x74\x78':case'\x77\x79':case'\x6b\x77':return L[I(w.L)];case'\x6b\x67':return L[I(w.K)];case'\x6d\x67':return L[I(w.U)+'\x64'];}throw K[I(w.H)](Error,K[I(w.S)]);},headers={'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':k('\x30\x78\x31\x37\x63')+o,'\x76\x65\x72':d,'\x73\x6f\x75\x72\x63\x65\x2d\x76\x65\x72':i[k(0x15e)]};r(e[k('\x30\x78\x31\x36\x31')],({source:Y,action:L,info:{musicInfo:K,type:U}})=>{const J={Y:0x169,L:0x157,K:0x160,U:'\x30\x78\x31\x38\x63',H:0x190,S:0x16e,N:0x180,B:0x17d,v:0x171,G:0x150,M:0x152},g={Y:'\x30\x78\x31\x35\x64',L:0x151,K:0x167,U:'\x30\x78\x31\x37\x36',H:0x154,S:0x176,N:'\x30\x78\x31\x35\x39',B:'\x30\x78\x31\x37\x34',v:0x177,G:'\x30\x78\x31\x37\x35',M:'\x30\x78\x31\x35\x36',T:'\x30\x78\x31\x36\x33',E:0x179,J:'\x30\x78\x31\x37\x65'},x=k,H={'\x42\x43\x6b\x53\x46':function(S,N,B){return S(N,B);},'\x53\x48\x76\x46\x71':x(J.Y),'\x67\x44\x69\x63\x7a':function(S,N,B,v){return S(N,B,v);},'\x57\x72\x58\x55\x4e':function(S,N){return S+N;},'\x42\x54\x4a\x75\x6f':x(J.L)+x(J.K)+x(J.U),'\x66\x6b\x6b\x6c\x54':x(J.H),'\x4d\x59\x64\x72\x70':function(S,N){return S!=N;},'\x56\x76\x47\x70\x5a':x(J.S),'\x74\x48\x42\x63\x6f':function(S,N){return S(N);},'\x70\x54\x70\x4e\x6c':x(J.N)};if(H[x(J.B)](H[x(J.v)],L))throw H[x(J.G)](Error,H[x(J.M)]);return new Promise((S,N)=>{const c=x;let B=c(g.Y)+Y+'\x2f'+H[c(g.L)](getId,Y,K)+'\x2f'+U;headers[c(g.K)]=a[c(g.U)][c(g.H)+'\x67'](a[c(g.S)][c(g.N)](JSON[c(g.B)](B[c(g.v)](/(?:\d\w)+/g),null,0x4fb+-0x44*-0x1f+-0x2*0x69b)),H[c(g.G)]),H[c(g.M)](t,H[c(g.T)](H[c(g.E)],B),{'\x6d\x65\x74\x68\x6f\x64':H[c(g.J)],'\x68\x65\x61\x64\x65\x72\x73':headers},(v,G)=>v?N(v):-0x13eb*-0x1+0x1*0x11c9+-0x25b4!==G[c('\x30\x78\x31\x37\x61')][c(0x182)]?N(Error(G[c('\x30\x78\x31\x37\x61')][c('\x30\x78\x31\x37\x32')])):void S(G[c('\x30\x78\x31\x37\x61')][c(0x170)]));});}),t(k(0x157)+k('\x30\x78\x31\x36\x30')+k('\x30\x78\x31\x34\x66')+k(0x164)+i[k(0x15e)],{'\x6d\x65\x74\x68\x6f\x64':k(0x190),'\x68\x65\x61\x64\x65\x72\x73':headers},(U,H)=>{const R={Y:0x184,L:0x18d,K:'\x30\x78\x31\x39\x32',U:'\x30\x78\x31\x36\x65',H:0x182,S:0x16b,N:'\x30\x78\x31\x37\x61',B:'\x30\x78\x31\x37\x62',v:0x17a,G:0x182,M:'\x30\x78\x31\x35\x38',T:0x18e,E:0x186,n:0x165,b:0x166,q:'\x30\x78\x31\x37\x61',X:'\x30\x78\x31\x39\x33',D:0x172,V:'\x30\x78\x31\x38\x35',h:0x166,O0:'\x30\x78\x31\x36\x38',O1:0x168,O2:0x15b,O3:'\x30\x78\x31\x35\x66',O4:0x18f,O5:0x183,O6:'\x30\x78\x31\x35\x61',O7:0x18a,O8:'\x30\x78\x31\x37\x61',O9:'\x30\x78\x31\x38\x37',OO:'\x30\x78\x31\x35\x63',OZ:0x17a},F=k,S={'\x57\x71\x54\x59\x55':F(R.Y),'\x7a\x4f\x64\x77\x68':function(M,T){return M!==T;},'\x74\x55\x75\x70\x54':function(M,T){return M!=T;},'\x4a\x71\x48\x59\x51':function(M,T){return M(T);},'\x70\x6d\x79\x45\x64':F(R.L),'\x47\x44\x6d\x59\x70':F(R.K),'\x53\x4f\x53\x4c\x6d':F(R.U),'\x65\x57\x54\x61\x70':function(M,T,E){return M(T,E);},'\x49\x46\x6b\x53\x52':function(M,T,E){return M(T,E);}},N={};N[F(R.H)]=0x0,N['\x73']=S[F(R.S)];const B={};B[F(R.N)]=N;if(U&&(H=B),S[F(R.B)](-0x19f8+0x1c51*-0x1+0x3649*0x1,H[F(R.v)][F(R.G)])||H[F(R.v)]['\x6d']&&S[F(R.M)](a[F(R.T)][F(R.E)](i[F(R.n)][F(R.b)]()),H[F(R.q)]['\x6d']))throw S[F(R.X)](Error,H[F(R.v)][F(R.D)]??S[F(R.V)]);let v={};for(let M of H[F(R.q)]['\x73'][F(R.h)]()[F(R.O0)]('\x26'))v[(M=M[F(R.O1)]('\x7c'))[F(R.O2)]()]={'\x74\x79\x70\x65':S[F(R.O3)],'\x61\x63\x74\x69\x6f\x6e\x73':[S[F(R.O4)]],'\x71\x75\x61\x6c\x69\x74\x79\x73':M};const G={};G[F(R.O5)]=v,(S[F(R.O6)](s,e[F(R.O7)],G),H[F(R.O8)]['\x75']&&S[F(R.O9)](s,e[F(R.OO)+'\x74'],{'\x6c\x6f\x67':H[F(R.OZ)]['\x75'],'\x75\x70\x64\x61\x74\x65\x55\x72\x6c':H[F(R.O8)]['\x68']}));}); 6 | -------------------------------------------------------------------------------- /野花音源.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @name 野花🌷 3 | * @version 1.0.0 4 | */ 5 | function O(){const R=['\x33\x39\x33\x34\x36\x38\x35\x45\x4a\x73\x79\x70\x6e','\x34\x31\x35\x35\x32\x32\x30\x73\x68\x6a\x6d\x71\x64','\x63\x6f\x64\x65','\x68\x61\x73\x68','\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x49','\x47\x45\x54','\x68\x65\x78','\x67\x53\x79\x45\x4d','\x34\x30\x30\x39\x33\x33\x36\x74\x77\x4e\x48\x5a\x78','\x51\x54\x64\x63\x58','\x76\x4d\x49\x75\x4e','\x61\x63\x47\x4f\x7a','\x69\x61\x6d\x7a\x57','\x6b\x77\x7c\x31\x32\x38\x6b\x26\x77\x79','\x2f\x75\x72\x6c\x2f','\x6e\x4e\x68\x44\x6e','\x62\x75\x66\x54\x6f\x53\x74\x72\x69\x6e','\x31\x31\x39\x39\x32\x34\x5a\x68\x75\x61\x72\x61','\x6c\x78\x2d\x6d\x75\x73\x69\x63\x2f','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x77\x65\x72\x2e\x74\x65\x6d\x70\x6d\x75','\x64\x61\x74\x61','\x51\x56\x6a\x7a\x45','\x2f\x75\x72\x6c\x69\x6e\x66\x6f\x2f','\x6d\x75\x73\x69\x63\x55\x72\x6c','\x31\x35\x31\x30\x37\x30\x37\x69\x56\x6d\x41\x73\x6f','\x6d\x64\x35','\x43\x78\x6c\x49\x4c','\x6d\x61\x74\x63\x68','\x72\x65\x71\x75\x65\x73\x74','\x39\x35\x39\x31\x31\x36\x6c\x45\x57\x57\x5a\x43','\x73\x6f\x6e\x67\x6d\x69\x64','\x73\x6f\x75\x72\x63\x65\x73','\x68\x74\x74\x70\x3a\x2f\x2f\x66\x6c\x6f','\x62\x75\x66\x66\x65\x72','\x31\x34\x4e\x6f\x69\x54\x4e\x48','\x73\x70\x6c\x69\x74','\x35\x31\x35\x39\x50\x66\x57\x61\x6f\x70','\x69\x6e\x69\x74\x65\x64','\x44\x46\x6a\x62\x4e','\x7c\x31\x32\x38\x6b\x26\x6d\x67\x7c\x31','\x73\x69\x63\x73\x2e\x74\x6b\x2f\x76\x31','\x31\x30\x38\x37\x38\x58\x6e\x65\x61\x4b\x46','\x74\x61\x67','\x66\x72\x6f\x6d','\x4b\x45\x57\x45\x4d','\x33\x4d\x68\x4b\x46\x79\x4a','\x77\x72\x44\x44\x46','\x51\x58\x63\x45\x49','\x75\x49\x54\x67\x78','\x32\x38\x6b\x26\x74\x78\x7c\x31\x32\x38','\x49\x4c\x6b\x4a\x4b','\x46\x68\x6b\x4e\x48','\x63\x72\x79\x70\x74\x6f','\u670d\u52a1\u5668\u5f02\u5e38','\x66\x61\x69\x6c\x65\x64','\x46\x70\x54\x6d\x50','\x31\x35\x36\x4b\x47\x44\x4f\x75\x6e','\x6d\x73\x67','\x66\x69\x61\x6c\x65\x64','\x62\x6f\x64\x79','\x6b\x26\x6b\x67\x7c\x31\x32\x38\x6b','\x4c\x43\x54\x51\x58','\x73\x68\x69\x66\x74','\x50\x6b\x4a\x6c\x48','\x78\x54\x6d\x67\x67','\x6d\x75\x73\x69\x63','\x72\x61\x77\x53\x63\x72\x69\x70\x74','\x39\x57\x51\x79\x76\x6a\x65','\x76\x65\x72\x73\x69\x6f\x6e','\x75\x70\x64\x61\x74\x65\x41\x6c\x65\x72','\x74\x72\x69\x6d','\x6c\x65\x63\x53\x47'];O=function(){return R;};return O();}function Z(Y,L){const K=O();return Z=function(U,H){U=U-(0x1*0x128b+-0x2084+0xf52);let S=K[U];return S;},Z(Y,L);}const k=Z;(function(Y,L){const F={Y:'\x30\x78\x31\x39\x30',L:0x159,K:'\x30\x78\x31\x36\x34',U:'\x30\x78\x31\x39\x64',H:0x17f,S:0x160,N:'\x30\x78\x31\x35\x62',B:0x187,v:0x17a,G:'\x30\x78\x31\x38\x30',M:0x198,T:0x16f},A=Z,K=Y();while(!![]){try{const U=parseInt(A(F.Y))/(0x26d0+-0x5ac+-0x1f3*0x11)*(parseInt(A(F.L))/(-0x4*-0x2d0+-0x2567+0x1a29))+-parseInt(A(F.K))/(-0x1f11+0x1517+0x9fd)*(parseInt(A(F.U))/(-0x1*-0xd3d+-0x985+-0x3b4))+parseInt(A(F.H))/(0x49*0x24+0x36+-0xa75)+-parseInt(A(F.S))/(-0x1*0x10f1+-0xbd1+0x133*0x18)*(parseInt(A(F.N))/(0x44a+0x4f8+0x1*-0x93b))+-parseInt(A(F.B))/(0x728*-0x3+0x1f78+0x27e*-0x4)*(parseInt(A(F.v))/(0x240f*0x1+-0x2288+-0x17e))+-parseInt(A(F.G))/(0x26a2+-0x72*-0x7+-0x29b6)+-parseInt(A(F.M))/(0xf1b+-0x10d*0x3+0xbe9*-0x1)*(-parseInt(A(F.T))/(0x1b7d+0x2479+-0x3fea));if(U===L)break;else K['push'](K['shift']());}catch(H){K['push'](K['shift']());}}}(O,0x8da*0x2af+0x7cc0+-0xa3765));const {EVENT_NAMES:e,request:t,on:r,send:o,env:s,version:d,currentScriptInfo:i,utils:u}=globalThis['\x6c\x78'],getId=(Y,L)=>{const p={Y:0x16d,L:'\x30\x78\x31\x39\x65',K:0x182,U:'\x30\x78\x31\x38\x33',H:'\x30\x78\x31\x36\x35',S:0x167},I=Z,K={'\x77\x72\x44\x44\x46':function(U,H){return U(H);},'\x75\x49\x54\x67\x78':I(p.Y)};switch(Y){case'\x74\x78':case'\x77\x79':case'\x6b\x77':return L[I(p.L)];case'\x6b\x67':return L[I(p.K)];case'\x6d\x67':return L[I(p.U)+'\x64'];}throw K[I(p.H)](Error,K[I(p.S)]);},headers={'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':k(0x191)+s,'\x76\x65\x72':d,'\x73\x6f\x75\x72\x63\x65\x2d\x76\x65\x72':i[k('\x30\x78\x31\x37\x62')]};r(e[k('\x30\x78\x31\x39\x63')],({source:Y,action:L,info:{musicInfo:K,type:U}})=>{const g={Y:0x185,L:'\x30\x78\x31\x61\x30',K:0x193,U:'\x30\x78\x31\x35\x66',H:'\x30\x78\x31\x38\x34',S:0x197,N:0x171,B:0x188,v:'\x30\x78\x31\x38\x61',G:'\x30\x78\x31\x35\x64',M:'\x30\x78\x31\x36\x39'},m={Y:'\x30\x78\x31\x38\x64',L:'\x30\x78\x31\x38\x39',K:0x161,U:0x1a1,H:'\x30\x78\x31\x38\x66',S:'\x30\x78\x31\x61\x31',N:0x162,B:0x192,v:0x19b,G:'\x30\x78\x31\x36\x36',M:0x174,T:0x18b,E:0x176,g:'\x30\x78\x31\x38\x65'},x=k,H={'\x76\x4d\x49\x75\x4e':function(S,N,B){return S(N,B);},'\x51\x58\x63\x45\x49':x(g.Y),'\x4c\x43\x54\x51\x58':function(S,N,B,v){return S(N,B,v);},'\x69\x61\x6d\x7a\x57':function(S,N){return S+N;},'\x50\x6b\x4a\x6c\x48':x(g.L)+x(g.K)+x(g.U),'\x6e\x4e\x68\x44\x6e':x(g.H),'\x51\x54\x64\x63\x58':function(S,N){return S!=N;},'\x61\x63\x47\x4f\x7a':x(g.S),'\x44\x46\x6a\x62\x4e':function(S,N){return S(N);},'\x49\x4c\x6b\x4a\x4b':x(g.N)};if(H[x(g.B)](H[x(g.v)],L))throw H[x(g.G)](Error,H[x(g.M)]);return new Promise((S,N)=>{const c=x;let B=c(m.Y)+Y+'\x2f'+H[c(m.L)](getId,Y,K)+'\x2f'+U;headers[c(m.K)]=u[c(m.U)][c(m.H)+'\x67'](u[c(m.S)][c(m.N)](JSON[c(m.B)](B[c(m.v)](/(?:\d\w)+/g),null,0x180c+0x257b+0xa41*-0x6)),H[c(m.G)]),H[c(m.M)](t,H[c(m.T)](H[c(m.E)],B),{'\x6d\x65\x74\x68\x6f\x64':H[c(m.g)],'\x68\x65\x61\x64\x65\x72\x73':headers},(v,G)=>v?N(v):-0x1ed7+-0xef*-0x3+0x1c0a!==G[c(0x172)][c('\x30\x78\x31\x38\x31')]?N(Error(G[c(0x172)][c(0x170)])):void S(G[c('\x30\x78\x31\x37\x32')][c('\x30\x78\x31\x39\x34')]));});}),t(k('\x30\x78\x31\x61\x30')+k('\x30\x78\x31\x39\x33')+k(0x15f)+k('\x30\x78\x31\x39\x36')+i[k('\x30\x78\x31\x37\x62')],{'\x6d\x65\x74\x68\x6f\x64':k('\x30\x78\x31\x38\x34'),'\x68\x65\x61\x64\x65\x72\x73':headers},(U,H)=>{const C={Y:'\x30\x78\x31\x38\x63',L:0x15e,K:'\x30\x78\x31\x36\x38',U:0x173,H:'\x30\x78\x31\x36\x63',S:0x178,N:'\x30\x78\x31\x39\x37',B:'\x30\x78\x31\x38\x31',v:'\x30\x78\x31\x37\x65',G:0x172,M:'\x30\x78\x31\x36\x33',T:'\x30\x78\x31\x38\x31',E:0x172,R:'\x30\x78\x31\x39\x61',n:'\x30\x78\x31\x36\x62',b:'\x30\x78\x31\x39\x39',q:0x179,X:0x17d,D:0x177,V:'\x30\x78\x31\x37\x32',h:'\x30\x78\x31\x37\x30',O0:0x16a,O1:0x172,O2:'\x30\x78\x31\x37\x64',O3:'\x30\x78\x31\x35\x61',O4:0x15a,O5:'\x30\x78\x31\x37\x35',O6:'\x30\x78\x31\x38\x36',O7:0x195,O8:'\x30\x78\x31\x39\x66',O9:0x16e,OO:0x15c,OZ:'\x30\x78\x31\x37\x32',OY:0x17c,OL:0x172,OK:'\x30\x78\x31\x37\x32'},a=k,S={'\x6c\x65\x63\x53\x47':a(C.Y)+a(C.L)+a(C.K)+a(C.U),'\x4b\x45\x57\x45\x4d':function(M,T){return M!==T;},'\x43\x78\x6c\x49\x4c':function(M,T){return M!=T;},'\x78\x54\x6d\x67\x67':function(M,T){return M(T);},'\x46\x68\x6b\x4e\x48':a(C.H),'\x67\x53\x79\x45\x4d':a(C.S),'\x51\x56\x6a\x7a\x45':a(C.N),'\x46\x70\x54\x6d\x50':function(M,T,E){return M(T,E);}},N={};N[a(C.B)]=0x0,N['\x73']=S[a(C.v)];const B={};B[a(C.G)]=N;if(U&&(H=B),S[a(C.M)](-0x1343*0x1+0x25ad+-0x126a,H[a(C.G)][a(C.T)])||H[a(C.E)]['\x6d']&&S[a(C.R)](u[a(C.n)][a(C.b)](i[a(C.q)][a(C.X)]()),H[a(C.E)]['\x6d']))throw S[a(C.D)](Error,H[a(C.V)][a(C.h)]??S[a(C.O0)]);let v={};for(let M of H[a(C.O1)]['\x73'][a(C.O2)]()[a(C.O3)]('\x26'))v[(M=M[a(C.O4)]('\x7c'))[a(C.O5)]()]={'\x74\x79\x70\x65':S[a(C.O6)],'\x61\x63\x74\x69\x6f\x6e\x73':[S[a(C.O7)]],'\x71\x75\x61\x6c\x69\x74\x79\x73':M};const G={};G[a(C.O8)]=v,(S[a(C.O9)](o,e[a(C.OO)],G),H[a(C.OZ)]['\x75']&&S[a(C.O9)](o,e[a(C.OY)+'\x74'],{'\x6c\x6f\x67':H[a(C.OL)]['\x75'],'\x75\x70\x64\x61\x74\x65\x55\x72\x6c':H[a(C.OK)]['\x68']}));}); 6 | -------------------------------------------------------------------------------- /flower音源_1.0.0.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @name 野花🌷 3 | * @version 1.0.0 4 | */ 5 | function O(){const R=['\x33\x39\x33\x34\x36\x38\x35\x45\x4a\x73\x79\x70\x6e','\x34\x31\x35\x35\x32\x32\x30\x73\x68\x6a\x6d\x71\x64','\x63\x6f\x64\x65','\x68\x61\x73\x68','\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x49','\x47\x45\x54','\x68\x65\x78','\x67\x53\x79\x45\x4d','\x34\x30\x30\x39\x33\x33\x36\x74\x77\x4e\x48\x5a\x78','\x51\x54\x64\x63\x58','\x76\x4d\x49\x75\x4e','\x61\x63\x47\x4f\x7a','\x69\x61\x6d\x7a\x57','\x6b\x77\x7c\x31\x32\x38\x6b\x26\x77\x79','\x2f\x75\x72\x6c\x2f','\x6e\x4e\x68\x44\x6e','\x62\x75\x66\x54\x6f\x53\x74\x72\x69\x6e','\x31\x31\x39\x39\x32\x34\x5a\x68\x75\x61\x72\x61','\x6c\x78\x2d\x6d\x75\x73\x69\x63\x2f','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x77\x65\x72\x2e\x74\x65\x6d\x70\x6d\x75','\x64\x61\x74\x61','\x51\x56\x6a\x7a\x45','\x2f\x75\x72\x6c\x69\x6e\x66\x6f\x2f','\x6d\x75\x73\x69\x63\x55\x72\x6c','\x31\x35\x31\x30\x37\x30\x37\x69\x56\x6d\x41\x73\x6f','\x6d\x64\x35','\x43\x78\x6c\x49\x4c','\x6d\x61\x74\x63\x68','\x72\x65\x71\x75\x65\x73\x74','\x39\x35\x39\x31\x31\x36\x6c\x45\x57\x57\x5a\x43','\x73\x6f\x6e\x67\x6d\x69\x64','\x73\x6f\x75\x72\x63\x65\x73','\x68\x74\x74\x70\x3a\x2f\x2f\x66\x6c\x6f','\x62\x75\x66\x66\x65\x72','\x31\x34\x4e\x6f\x69\x54\x4e\x48','\x73\x70\x6c\x69\x74','\x35\x31\x35\x39\x50\x66\x57\x61\x6f\x70','\x69\x6e\x69\x74\x65\x64','\x44\x46\x6a\x62\x4e','\x7c\x31\x32\x38\x6b\x26\x6d\x67\x7c\x31','\x73\x69\x63\x73\x2e\x74\x6b\x2f\x76\x31','\x31\x30\x38\x37\x38\x58\x6e\x65\x61\x4b\x46','\x74\x61\x67','\x66\x72\x6f\x6d','\x4b\x45\x57\x45\x4d','\x33\x4d\x68\x4b\x46\x79\x4a','\x77\x72\x44\x44\x46','\x51\x58\x63\x45\x49','\x75\x49\x54\x67\x78','\x32\x38\x6b\x26\x74\x78\x7c\x31\x32\x38','\x49\x4c\x6b\x4a\x4b','\x46\x68\x6b\x4e\x48','\x63\x72\x79\x70\x74\x6f','\u670d\u52a1\u5668\u5f02\u5e38','\x66\x61\x69\x6c\x65\x64','\x46\x70\x54\x6d\x50','\x31\x35\x36\x4b\x47\x44\x4f\x75\x6e','\x6d\x73\x67','\x66\x69\x61\x6c\x65\x64','\x62\x6f\x64\x79','\x6b\x26\x6b\x67\x7c\x31\x32\x38\x6b','\x4c\x43\x54\x51\x58','\x73\x68\x69\x66\x74','\x50\x6b\x4a\x6c\x48','\x78\x54\x6d\x67\x67','\x6d\x75\x73\x69\x63','\x72\x61\x77\x53\x63\x72\x69\x70\x74','\x39\x57\x51\x79\x76\x6a\x65','\x76\x65\x72\x73\x69\x6f\x6e','\x75\x70\x64\x61\x74\x65\x41\x6c\x65\x72','\x74\x72\x69\x6d','\x6c\x65\x63\x53\x47'];O=function(){return R;};return O();}function Z(Y,L){const K=O();return Z=function(U,H){U=U-(0x1*0x128b+-0x2084+0xf52);let S=K[U];return S;},Z(Y,L);}const k=Z;(function(Y,L){const F={Y:'\x30\x78\x31\x39\x30',L:0x159,K:'\x30\x78\x31\x36\x34',U:'\x30\x78\x31\x39\x64',H:0x17f,S:0x160,N:'\x30\x78\x31\x35\x62',B:0x187,v:0x17a,G:'\x30\x78\x31\x38\x30',M:0x198,T:0x16f},A=Z,K=Y();while(!![]){try{const U=parseInt(A(F.Y))/(0x26d0+-0x5ac+-0x1f3*0x11)*(parseInt(A(F.L))/(-0x4*-0x2d0+-0x2567+0x1a29))+-parseInt(A(F.K))/(-0x1f11+0x1517+0x9fd)*(parseInt(A(F.U))/(-0x1*-0xd3d+-0x985+-0x3b4))+parseInt(A(F.H))/(0x49*0x24+0x36+-0xa75)+-parseInt(A(F.S))/(-0x1*0x10f1+-0xbd1+0x133*0x18)*(parseInt(A(F.N))/(0x44a+0x4f8+0x1*-0x93b))+-parseInt(A(F.B))/(0x728*-0x3+0x1f78+0x27e*-0x4)*(parseInt(A(F.v))/(0x240f*0x1+-0x2288+-0x17e))+-parseInt(A(F.G))/(0x26a2+-0x72*-0x7+-0x29b6)+-parseInt(A(F.M))/(0xf1b+-0x10d*0x3+0xbe9*-0x1)*(-parseInt(A(F.T))/(0x1b7d+0x2479+-0x3fea));if(U===L)break;else K['push'](K['shift']());}catch(H){K['push'](K['shift']());}}}(O,0x8da*0x2af+0x7cc0+-0xa3765));const {EVENT_NAMES:e,request:t,on:r,send:o,env:s,version:d,currentScriptInfo:i,utils:u}=globalThis['\x6c\x78'],getId=(Y,L)=>{const p={Y:0x16d,L:'\x30\x78\x31\x39\x65',K:0x182,U:'\x30\x78\x31\x38\x33',H:'\x30\x78\x31\x36\x35',S:0x167},I=Z,K={'\x77\x72\x44\x44\x46':function(U,H){return U(H);},'\x75\x49\x54\x67\x78':I(p.Y)};switch(Y){case'\x74\x78':case'\x77\x79':case'\x6b\x77':return L[I(p.L)];case'\x6b\x67':return L[I(p.K)];case'\x6d\x67':return L[I(p.U)+'\x64'];}throw K[I(p.H)](Error,K[I(p.S)]);},headers={'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':k(0x191)+s,'\x76\x65\x72':d,'\x73\x6f\x75\x72\x63\x65\x2d\x76\x65\x72':i[k('\x30\x78\x31\x37\x62')]};r(e[k('\x30\x78\x31\x39\x63')],({source:Y,action:L,info:{musicInfo:K,type:U}})=>{const g={Y:0x185,L:'\x30\x78\x31\x61\x30',K:0x193,U:'\x30\x78\x31\x35\x66',H:'\x30\x78\x31\x38\x34',S:0x197,N:0x171,B:0x188,v:'\x30\x78\x31\x38\x61',G:'\x30\x78\x31\x35\x64',M:'\x30\x78\x31\x36\x39'},m={Y:'\x30\x78\x31\x38\x64',L:'\x30\x78\x31\x38\x39',K:0x161,U:0x1a1,H:'\x30\x78\x31\x38\x66',S:'\x30\x78\x31\x61\x31',N:0x162,B:0x192,v:0x19b,G:'\x30\x78\x31\x36\x36',M:0x174,T:0x18b,E:0x176,g:'\x30\x78\x31\x38\x65'},x=k,H={'\x76\x4d\x49\x75\x4e':function(S,N,B){return S(N,B);},'\x51\x58\x63\x45\x49':x(g.Y),'\x4c\x43\x54\x51\x58':function(S,N,B,v){return S(N,B,v);},'\x69\x61\x6d\x7a\x57':function(S,N){return S+N;},'\x50\x6b\x4a\x6c\x48':x(g.L)+x(g.K)+x(g.U),'\x6e\x4e\x68\x44\x6e':x(g.H),'\x51\x54\x64\x63\x58':function(S,N){return S!=N;},'\x61\x63\x47\x4f\x7a':x(g.S),'\x44\x46\x6a\x62\x4e':function(S,N){return S(N);},'\x49\x4c\x6b\x4a\x4b':x(g.N)};if(H[x(g.B)](H[x(g.v)],L))throw H[x(g.G)](Error,H[x(g.M)]);return new Promise((S,N)=>{const c=x;let B=c(m.Y)+Y+'\x2f'+H[c(m.L)](getId,Y,K)+'\x2f'+U;headers[c(m.K)]=u[c(m.U)][c(m.H)+'\x67'](u[c(m.S)][c(m.N)](JSON[c(m.B)](B[c(m.v)](/(?:\d\w)+/g),null,0x180c+0x257b+0xa41*-0x6)),H[c(m.G)]),H[c(m.M)](t,H[c(m.T)](H[c(m.E)],B),{'\x6d\x65\x74\x68\x6f\x64':H[c(m.g)],'\x68\x65\x61\x64\x65\x72\x73':headers},(v,G)=>v?N(v):-0x1ed7+-0xef*-0x3+0x1c0a!==G[c(0x172)][c('\x30\x78\x31\x38\x31')]?N(Error(G[c(0x172)][c(0x170)])):void S(G[c('\x30\x78\x31\x37\x32')][c('\x30\x78\x31\x39\x34')]));});}),t(k('\x30\x78\x31\x61\x30')+k('\x30\x78\x31\x39\x33')+k(0x15f)+k('\x30\x78\x31\x39\x36')+i[k('\x30\x78\x31\x37\x62')],{'\x6d\x65\x74\x68\x6f\x64':k('\x30\x78\x31\x38\x34'),'\x68\x65\x61\x64\x65\x72\x73':headers},(U,H)=>{const C={Y:'\x30\x78\x31\x38\x63',L:0x15e,K:'\x30\x78\x31\x36\x38',U:0x173,H:'\x30\x78\x31\x36\x63',S:0x178,N:'\x30\x78\x31\x39\x37',B:'\x30\x78\x31\x38\x31',v:'\x30\x78\x31\x37\x65',G:0x172,M:'\x30\x78\x31\x36\x33',T:'\x30\x78\x31\x38\x31',E:0x172,R:'\x30\x78\x31\x39\x61',n:'\x30\x78\x31\x36\x62',b:'\x30\x78\x31\x39\x39',q:0x179,X:0x17d,D:0x177,V:'\x30\x78\x31\x37\x32',h:'\x30\x78\x31\x37\x30',O0:0x16a,O1:0x172,O2:'\x30\x78\x31\x37\x64',O3:'\x30\x78\x31\x35\x61',O4:0x15a,O5:'\x30\x78\x31\x37\x35',O6:'\x30\x78\x31\x38\x36',O7:0x195,O8:'\x30\x78\x31\x39\x66',O9:0x16e,OO:0x15c,OZ:'\x30\x78\x31\x37\x32',OY:0x17c,OL:0x172,OK:'\x30\x78\x31\x37\x32'},a=k,S={'\x6c\x65\x63\x53\x47':a(C.Y)+a(C.L)+a(C.K)+a(C.U),'\x4b\x45\x57\x45\x4d':function(M,T){return M!==T;},'\x43\x78\x6c\x49\x4c':function(M,T){return M!=T;},'\x78\x54\x6d\x67\x67':function(M,T){return M(T);},'\x46\x68\x6b\x4e\x48':a(C.H),'\x67\x53\x79\x45\x4d':a(C.S),'\x51\x56\x6a\x7a\x45':a(C.N),'\x46\x70\x54\x6d\x50':function(M,T,E){return M(T,E);}},N={};N[a(C.B)]=0x0,N['\x73']=S[a(C.v)];const B={};B[a(C.G)]=N;if(U&&(H=B),S[a(C.M)](-0x1343*0x1+0x25ad+-0x126a,H[a(C.G)][a(C.T)])||H[a(C.E)]['\x6d']&&S[a(C.R)](u[a(C.n)][a(C.b)](i[a(C.q)][a(C.X)]()),H[a(C.E)]['\x6d']))throw S[a(C.D)](Error,H[a(C.V)][a(C.h)]??S[a(C.O0)]);let v={};for(let M of H[a(C.O1)]['\x73'][a(C.O2)]()[a(C.O3)]('\x26'))v[(M=M[a(C.O4)]('\x7c'))[a(C.O5)]()]={'\x74\x79\x70\x65':S[a(C.O6)],'\x61\x63\x74\x69\x6f\x6e\x73':[S[a(C.O7)]],'\x71\x75\x61\x6c\x69\x74\x79\x73':M};const G={};G[a(C.O8)]=v,(S[a(C.O9)](o,e[a(C.OO)],G),H[a(C.OZ)]['\x75']&&S[a(C.O9)](o,e[a(C.OY)+'\x74'],{'\x6c\x6f\x67':H[a(C.OL)]['\x75'],'\x75\x70\x64\x61\x74\x65\x55\x72\x6c':H[a(C.OK)]['\x68']}));}); 6 | -------------------------------------------------------------------------------- /ikun音源-HK.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name ikun音源(中国香港服务器) 3 | * @description 你干嘛哎哟 4 | * @version v1.0.1 5 | * @author Folltoshe & helloplhm-qwq 6 | * @repository https://github.com/lxmusics/lx-music-api-server 7 | */ 8 | 9 | function _0x2042(_0xc6a29c,_0x40c5d9){const _0x1b5cda=_0xdef6();return _0x2042=function(_0x7ce5ff,_0x1d6b17){_0x7ce5ff=_0x7ce5ff-(-0x3d4+0x1f07+-0x1*0x1aac);let _0x1fdf34=_0x1b5cda[_0x7ce5ff];return _0x1fdf34;},_0x2042(_0xc6a29c,_0x40c5d9);}const _0x5854be=_0x2042;(function(_0x1bf074,_0x40c7ab){const _0x514ad9=_0x2042,_0x4c6854=_0x1bf074();while(!![]){try{const _0x4ad520=-parseInt(_0x514ad9(0x94))/(-0x1165+0x2*0x6aa+0x2*0x209)*(parseInt(_0x514ad9(0xd7))/(-0x2cf*-0xd+0x1001+-0x3482))+-parseInt(_0x514ad9(0x98))/(0x33a*-0x3+-0x9ae+-0xab*-0x1d)*(-parseInt(_0x514ad9(0xd6))/(0x1542+-0x28f*-0xf+-0x3b9f))+parseInt(_0x514ad9(0xd2))/(-0x1cec+0x1d26+-0x35)+-parseInt(_0x514ad9(0xd3))/(-0x1*0x1160+-0x1*0x799+0x18ff)*(parseInt(_0x514ad9(0x96))/(-0x1cc6+-0xe41+0x72d*0x6))+parseInt(_0x514ad9(0xad))/(-0x1843*0x1+0x50b+-0x8*-0x268)*(parseInt(_0x514ad9(0xcb))/(0x91b+0xc00*-0x3+0x1aee*0x1))+parseInt(_0x514ad9(0xe0))/(-0x1311+0x18a0+-0x585)*(parseInt(_0x514ad9(0x8d))/(0xa1a+-0x235d+0x1*0x194e))+-parseInt(_0x514ad9(0xba))/(-0x1b9b+0x1bf2*-0x1+0x1*0x3799);if(_0x4ad520===_0x40c7ab)break;else _0x4c6854['push'](_0x4c6854['shift']());}catch(_0x41df23){_0x4c6854['push'](_0x4c6854['shift']());}}}(_0xdef6,-0x21b17*0x6+0x55354+0xf46ec));const DEV_ENABLE=!![],API_URL=_0x5854be(0xe1)+_0x5854be(0xb1)+_0x5854be(0xbf)+'nk',API_KEY='',MUSIC_QUALITY={'kw':[_0x5854be(0x9d),_0x5854be(0xb8),_0x5854be(0xb9)],'kg':[_0x5854be(0x9d),_0x5854be(0xb8),_0x5854be(0xb9)],'tx':[_0x5854be(0x9d),_0x5854be(0xb8),_0x5854be(0xb9)],'wy':[_0x5854be(0x9d),_0x5854be(0xb8),_0x5854be(0xb9)],'mg':[_0x5854be(0x9d),_0x5854be(0xb8),_0x5854be(0xb9)]},MUSIC_SOURCE=Object[_0x5854be(0xd0)](MUSIC_QUALITY),{EVENT_NAMES,request,on,send,utils,env,version}=globalThis['lx'],httpFetch=(_0x3c9878,_0x115af5={'method':_0x5854be(0xe2)})=>{const _0x5ddb9c={'HgFgq':function(_0x2acd80,_0x57df4b){return _0x2acd80(_0x57df4b);},'kxrIg':function(_0x20edbb,_0x13de27){return _0x20edbb(_0x13de27);},'BXkPu':function(_0x57fc5a,_0x29c7af,_0x36f98c,_0x1ff871){return _0x57fc5a(_0x29c7af,_0x36f98c,_0x1ff871);}};return new Promise((_0x4d3fe3,_0x35e107)=>{const _0x1262e7=_0x2042,_0x4d6b5c={'nvIuL':function(_0x202d08,_0x3bd624){const _0x3eb5bf=_0x2042;return _0x5ddb9c[_0x3eb5bf(0x95)](_0x202d08,_0x3bd624);},'TsHhq':function(_0x8a4855,_0xac5e00){const _0xd73dff=_0x2042;return _0x5ddb9c[_0xd73dff(0xe3)](_0x8a4855,_0xac5e00);}};_0x5ddb9c[_0x1262e7(0xca)](request,_0x3c9878,_0x115af5,(_0x1cd495,_0x579421)=>{const _0xb32dc4=_0x1262e7;if(_0x1cd495)return _0x4d6b5c[_0xb32dc4(0xc3)](_0x35e107,_0x1cd495);_0x4d6b5c[_0xb32dc4(0x8a)](_0x4d3fe3,_0x579421);});});},handleGetMusicUrl=async(_0xde5825,_0x312213,_0x1c463b)=>{const _0x458dbd=_0x5854be,_0x128559={'ormak':function(_0x536cc9,_0x84dd01,_0x1366ea){return _0x536cc9(_0x84dd01,_0x1366ea);},'pblzs':_0x458dbd(0xe2),'jrzHq':_0x458dbd(0x87)+_0x458dbd(0xcc),'vcGly':function(_0x1f206e,_0xd30690){return _0x1f206e(_0xd30690);},'lyDSP':function(_0x4fbb1e,_0x5b6820){return _0x4fbb1e(_0x5b6820);},'wRAxW':_0x458dbd(0xcd)+'or','TPApi':_0x458dbd(0xc2),'wuZFB':_0x458dbd(0x99)+_0x458dbd(0xc0),'iHuWo':_0x458dbd(0xb6)+_0x458dbd(0x8c)+'r','gGoPq':_0x458dbd(0xa6)+_0x458dbd(0xd8),'GWSDt':_0x458dbd(0xc8)+'r'},_0x5247cd=_0x312213[_0x458dbd(0xc5)]??_0x312213[_0x458dbd(0xd5)],_0x4228a6=await _0x128559[_0x458dbd(0xdb)](httpFetch,API_URL+_0x458dbd(0xa4)+_0xde5825+'/'+_0x5247cd+'/'+_0x1c463b,{'method':_0x128559[_0x458dbd(0xbb)],'headers':{'Content-Type':_0x128559[_0x458dbd(0xbc)],'User-Agent':''+(env?_0x458dbd(0xdd)+env+'/'+version:_0x458dbd(0xb0)+_0x458dbd(0xac)+version),'X-Request-Key':API_KEY}}),{body:_0x1d8095}=_0x4228a6;if(!_0x1d8095||_0x128559[_0x458dbd(0xc9)](isNaN,_0x128559[_0x458dbd(0xde)](Number,_0x1d8095[_0x458dbd(0xa9)])))throw new Error(_0x128559[_0x458dbd(0xb4)]);switch(_0x1d8095[_0x458dbd(0xa9)]){case-0x828+0xd7e+-0x556:return _0x1d8095[_0x458dbd(0xc7)];case-0x22c5+0x6bc+0xe05*0x2:throw new Error(_0x128559[_0x458dbd(0xae)]);case-0x1b*-0xae+0x2*-0x245+0x2*-0x6e7:throw new Error(_0x128559[_0x458dbd(0x93)]);case 0x121f*0x1+0x22e+-0x1449*0x1:throw new Error(_0x128559[_0x458dbd(0xaf)]);case 0x2d*0xc6+-0x2*-0x24b+-0x275f:throw new Error(_0x128559[_0x458dbd(0xd1)]);case-0x6f0+-0x188f+-0x1f84*-0x1:throw new Error(_0x128559[_0x458dbd(0xdf)]);default:throw new Error(_0x1d8095[_0x458dbd(0x8f)]??_0x128559[_0x458dbd(0xb4)]);}},musicSources={};MUSIC_SOURCE[_0x5854be(0xb7)](_0x123d1c=>{const _0x2fef49=_0x5854be,_0xf7875d={'ushUi':_0x2fef49(0xb5),'NDHCO':_0x2fef49(0x9b)};musicSources[_0x123d1c]={'name':_0x123d1c,'type':_0xf7875d[_0x2fef49(0xc6)],'actions':[_0xf7875d[_0x2fef49(0xb2)]],'qualitys':MUSIC_QUALITY[_0x123d1c]};}),on(EVENT_NAMES[_0x5854be(0x89)],({action:_0x2ab78f,source:_0x4d1a6c,info:_0x422ed4})=>{const _0x3e25ba=_0x5854be,_0x3506b1={'hdcMZ':_0x3e25ba(0x9b),'vpjaT':function(_0x21108a,_0x1fde9){return _0x21108a!=_0x1fde9;},'leRuA':_0x3e25ba(0xbe),'ZEXet':_0x3e25ba(0x91),'eoipx':_0x3e25ba(0x9f),'gFRDl':_0x3e25ba(0xce),'BjCNL':_0x3e25ba(0xe5),'mttqt':function(_0x598d12,_0x378d22,_0x3e9480,_0x283be6){return _0x598d12(_0x378d22,_0x3e9480,_0x283be6);},'qXkZT':_0x3e25ba(0x92)+_0x3e25ba(0x97)};switch(_0x2ab78f){case _0x3506b1[_0x3e25ba(0xaa)]:if(_0x3506b1[_0x3e25ba(0x9a)](env,_0x3506b1[_0x3e25ba(0xa3)])){const _0x2ebf57=_0x3506b1[_0x3e25ba(0xa8)][_0x3e25ba(0xcf)]('|');let _0x5a16a3=-0x1dac+0x23ec*0x1+0x8*-0xc8;while(!![]){switch(_0x2ebf57[_0x5a16a3++]){case'0':console[_0x3e25ba(0xa2)](_0x3506b1[_0x3e25ba(0xa1)],_0x422ed4[_0x3e25ba(0xd9)]);continue;case'1':console[_0x3e25ba(0x8e)](_0x3e25ba(0xb3)+_0x3e25ba(0xa0)+_0x3e25ba(0xc1));continue;case'2':console[_0x3e25ba(0xc4)]();continue;case'3':console[_0x3e25ba(0xa2)](_0x3506b1[_0x3e25ba(0xdc)],_0x4d1a6c);continue;case'4':console[_0x3e25ba(0xa2)](_0x3506b1[_0x3e25ba(0x9e)],_0x422ed4[_0x3e25ba(0xe5)]);continue;}break;}}else console[_0x3e25ba(0xa2)](_0x3e25ba(0xb3)+_0x3e25ba(0xa0)+_0x3e25ba(0xc1)),console[_0x3e25ba(0xa2)](_0x3506b1[_0x3e25ba(0xdc)],_0x4d1a6c),console[_0x3e25ba(0xa2)](_0x3506b1[_0x3e25ba(0xa1)],_0x422ed4[_0x3e25ba(0xd9)]),console[_0x3e25ba(0xa2)](_0x3506b1[_0x3e25ba(0x9e)],_0x422ed4[_0x3e25ba(0xe5)]);return _0x3506b1[_0x3e25ba(0xa5)](handleGetMusicUrl,_0x4d1a6c,_0x422ed4[_0x3e25ba(0xe5)],_0x422ed4[_0x3e25ba(0xd9)])[_0x3e25ba(0x88)](_0x230881=>Promise[_0x3e25ba(0x90)](_0x230881))[_0x3e25ba(0xbd)](_0x1ad0d5=>Promise[_0x3e25ba(0xab)](_0x1ad0d5));default:console[_0x3e25ba(0x9c)](_0x3e25ba(0xa7)+_0x2ab78f+(_0x3e25ba(0xe4)+_0x3e25ba(0x8b)));return Promise[_0x3e25ba(0xab)](_0x3506b1[_0x3e25ba(0xd4)]);}}),send(EVENT_NAMES[_0x5854be(0xda)],{'status':!![],'openDevTools':DEV_ENABLE,'sources':musicSources});function _0xdef6(){const _0xa027d=['GWSDt','351670wNMxeM','https://lx','GET','kxrIg',')\x20not\x20supp','musicInfo','applicatio','then','request','TsHhq','ort','erver\x20erro','253iPPGaW','group','msg','resolve','1|3|0|4|2','action\x20not','wuZFB','175303yPGCPq','HgFgq','105TWjTeG','\x20support','192qmzaUv','get\x20music\x20','vpjaT','musicUrl','error','128k','BjCNL','quality','ion(musicU','eoipx','log','leRuA','/url/','mttqt','too\x20many\x20r','action(','ZEXet','code','hdcMZ','reject','quest/','1224328aiyLGh','TPApi','iHuWo','lx-usic-re','songapi.ik','NDHCO','Handle\x20Act','wRAxW','music','internal\x20s','forEach','320k','flac','9436224FZokWy','pblzs','jrzHq','catch','mobile','unshare.li','url\x20failed','rl)','block\x20ip','nvIuL','groupEnd','hash','ushUi','data','param\x20erro','vcGly','BXkPu','9zONVTZ','n/json','unknow\x20err','source','split','keys','gGoPq','3651480VSYgBV','231618mXsaJs','qXkZT','songmid','23168tIvXqZ','2gYPUqd','equests','type','inited','ormak','gFRDl','lx-music-','lyDSP'];_0xdef6=function(){return _0xa027d;};return _0xdef6();} -------------------------------------------------------------------------------- /grass-v1.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @name 野草🌾 3 | * @version 1 4 | */ 5 | function Z(p,O){const w=R();return Z=function(r,g){r=r-(-0x237+0x2645+-0x2243);let h=w[r];return h;},Z(p,O);}function R(){const Ru=['\x6d\x69\x72\x72\x6f\x72\x2e\x63\x6f\x6d','\x74\x68\x65\x6e','\x4d\x59\x67\x79\x75','\x64\x6f\x4b\x74\x4b','\x39\x42\x69\x56\x4c\x77\x65','\x6c\x47\x79\x74\x75','\x57\x43\x70\x78\x67','\u670d\u52a1\u5668\u5f02\u5e38','\x76\x69\x6e\x66\x6f','\x68\x61\x73\x68','\x73\x70\x6c\x69\x74','\x5a\x71\x70\x45\x54','\x6d\x61\x74\x63\x68','\x63\x72\x79\x70\x74\x6f','\x73\x6f\x75\x72\x63\x65\x73','\x6d\x75\x73\x69\x63\x55\x72\x6c','\x74\x61\x67','\x54\x76\x6d\x49\x77','\x6d\x75\x73\x69\x63','\x68\x74\x74\x70\x3a\x2f\x2f\x39\x37\x2e','\x62\x6f\x64\x79','\x33\x39\x34\x35\x38\x34\x52\x4f\x4b\x58\x72\x4d','\x55\x57\x41\x61\x48','\x46\x41\x49\x4c\x45\x44','\x32\x39\x31\x30\x74\x76\x76\x58\x41\x7a','\x2f\x67\x72\x61\x73\x73\x2d\x73\x6f\x75','\x52\x77\x4f\x70\x5a','\x31\x39\x30\x31\x37\x37\x30\x66\x42\x53\x58\x7a\x58','\x2f\x75\x72\x6c\x2f','\x66\x61\x69\x6c\x65\x64','\x75\x70\x64\x61\x74\x65\x41\x6c\x65\x72','\x69\x6e\x66\x6f\x2f\x6c\x61\x74\x65\x73','\x35\x36\x36\x30\x31\x34\x65\x4d\x57\x48\x65\x4f','\x46\x56\x74\x68\x62','\x65\x4e\x49\x51\x6a','\x6d\x64\x35','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x62\x75\x66\x54\x6f\x53\x74\x72\x69\x6e','\x46\x56\x47\x79\x50','\x6d\x73\x67','\x4d\x66\x6a\x72\x45','\x77\x73\x77\x49\x49','\x31\x32\x30\x31\x36\x36\x32\x76\x68\x6c\x6d\x41\x69','\x53\x4b\x49\x6b\x4d','\x57\x78\x71\x6e\x50','\x72\x65\x71\x75\x65\x73\x74','\x69\x66\x73\x42\x71','\x62\x75\x66\x66\x65\x72','\x72\x63\x65\x2d\x69\x6e\x66\x6f\x2f\x6c','\x36\x34\x2e\x33\x37\x2e\x32\x33\x35\x2f','\x73\x68\x69\x66\x74','\x74\x72\x69\x6d','\x6a\x6c\x6a\x54\x70','\x6b\x77\x7c\x31\x32\x38\x6b','\x45\x6e\x76\x41\x78','\x32\x65\x4b\x61\x63\x75\x79','\x59\x65\x77\x56\x48','\x73\x73\x2d\x73\x6f\x75\x72\x63\x65\x2d','\x61\x6e\x79','\x4f\x7a\x42\x6e\x67','\x6f\x71\x46\x43\x6e','\x33\x39\x36\x34\x48\x4b\x74\x4e\x6b\x42','\x70\x6d\x66\x42\x68','\x72\x4a\x55\x55\x55','\x73\x6f\x6e\x67\x6d\x69\x64','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x72\x65','\x47\x45\x54','\x61\x74\x65\x73\x74','\x63\x6f\x64\x65','\x67\x78\x4a\x4a\x65','\x56\x46\x78\x42\x68','\x68\x65\x78','\x64\x61\x74\x61','\x58\x6d\x78\x4d\x42','\x66\x69\x6e\x61\x6c\x6c\x79','\x71\x73\x4f\x54\x7a','\x72\x61\x77\x53\x63\x72\x69\x70\x74','\x6c\x78\x2d\x6d\x75\x73\x69\x63\x2f','\x33\x37\x37\x39\x33\x38\x34\x6e\x59\x4a\x4a\x55\x4b','\x69\x6e\x69\x74\x65\x64','\x67\x51\x6d\x51\x6a','\x7a\x72\x73\x6f\x45','\x67\x69\x73\x74\x72\x79\x2e\x6e\x70\x6d','\x53\x61\x46\x7a\x77','\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x49','\x66\x69\x61\x6c\x65\x64','\x39\x37\x38\x31\x38\x36\x69\x70\x4b\x5a\x7a\x55','\x6a\x73\x2e\x6f\x72\x67\x2f\x67\x72\x61','\x76\x65\x72\x73\x69\x6f\x6e','\x67\x72\x61\x73\x73\x2f\x76\x31','\x4e\x4b\x64\x6c\x67','\x66\x72\x6f\x6d','\x44\x74\x66\x6f\x48'];R=function(){return Ru;};return R();}(function(p,O){const H={p:0x1e6,O:0x1fd,w:0x21c,r:'\x30\x78\x32\x30\x33',g:0x1de,h:0x1db,E:'\x30\x78\x31\x66\x30',u:'\x30\x78\x32\x31\x34',C:'\x30\x78\x32\x32\x37',U:0x1e1},v=Z,w=p();while(!![]){try{const r=-parseInt(v(H.p))/(-0x4c*0x20+0x2404*0x1+-0x1a83*0x1)*(parseInt(v(H.O))/(0x1*0xd2d+0xf5b+-0x1c86))+parseInt(v(H.w))/(-0x7b1+0xfea+-0x41b*0x2)+-parseInt(v(H.r))/(-0xc0f+-0x1*0x1fb2+-0x2d*-0xf9)*(-parseInt(v(H.g))/(-0x1768+-0x3*-0x5b1+0x65a))+parseInt(v(H.h))/(0x3d*0x6d+0x15f6+-0x2fe9)+parseInt(v(H.E))/(0x3*0x3d1+0x186f+-0x1*0x23db)+-parseInt(v(H.u))/(-0x1f11+-0x119*0xd+0x2d5e)+parseInt(v(H.C))/(-0x1cd2+0x3af+0x6*0x432)*(parseInt(v(H.U))/(0x452+0x3b*0x47+-0x14a5));if(r===O)break;else w['push'](w['shift']());}catch(g){w['push'](w['shift']());}}}(R,-0x25a29*0x3+-0x89b60+0x141e75),((()=>{const RE={p:0x1e3,O:0x20d,w:0x1d9,r:'\x30\x78\x31\x66\x37',g:0x21f,h:0x208,E:0x1d5,u:0x21b,C:'\x30\x78\x31\x64\x64',U:0x1cd,T:'\x30\x78\x31\x64\x38',z:'\x30\x78\x32\x30\x37',P:'\x30\x78\x32\x31\x38',e:'\x30\x78\x32\x31\x64',L:0x1ff,o:0x1e5,l:0x207,f:'\x30\x78\x32\x31\x38',V:'\x30\x78\x32\x32\x33',m:0x1df,j:0x1f6,c:0x209,N:'\x30\x78\x31\x66\x62',S:'\x30\x78\x32\x31\x33',q:'\x30\x78\x32\x31\x65',y:'\x30\x78\x32\x31\x37',G:0x1f3,F:'\x30\x78\x31\x64\x37',K:0x1cc,b:'\x30\x78\x31\x66\x65',t:'\x30\x78\x32\x30\x30',D:'\x30\x78\x32\x32\x36',Ru:0x219,RC:0x224,RU:'\x30\x78\x32\x31\x30'},Rh={p:0x20b,O:'\x30\x78\x31\x64\x33',w:0x1e9,r:0x212,g:0x1f9,h:'\x30\x78\x31\x64\x31',E:0x20f,u:0x1d0,C:0x1d0,U:'\x30\x78\x31\x66\x38',T:0x1f4,z:'\x30\x78\x31\x65\x38',P:0x1d4,e:0x1cb,L:0x215,o:0x1fc,l:0x219,f:0x1d1,V:0x21e,m:'\x30\x78\x31\x63\x62',j:0x1e4},Rr={p:0x1ee,O:0x20c},RO={p:'\x30\x78\x32\x32\x32',O:'\x30\x78\x31\x64\x63',w:0x20c,r:'\x30\x78\x31\x65\x37',g:'\x30\x78\x31\x65\x38',h:0x219,E:'\x30\x78\x32\x30\x35'},R9={p:0x217},R8={p:0x206,O:0x1cf,w:0x21a,r:0x219,g:'\x30\x78\x31\x65\x30'},A=Z,p={'\x53\x61\x46\x7a\x77':function(c,N){return c(N);},'\x52\x77\x4f\x70\x5a':A(RE.p),'\x7a\x72\x73\x6f\x45':function(c,N,S){return c(N,S);},'\x44\x74\x66\x6f\x48':A(RE.O),'\x53\x4b\x49\x6b\x4d':function(c,N,S,q){return c(N,S,q);},'\x46\x56\x47\x79\x50':function(c,N){return c+N;},'\x55\x57\x41\x61\x48':A(RE.w)+A(RE.r)+A(RE.g),'\x56\x46\x78\x42\x68':A(RE.h),'\x46\x56\x74\x68\x62':function(c,N){return c!=N;},'\x65\x4e\x49\x51\x6a':A(RE.E),'\x72\x4a\x55\x55\x55':A(RE.u),'\x6a\x6c\x6a\x54\x70':function(c,N){return c(N);},'\x4e\x4b\x64\x6c\x67':function(c,N){return c(N);},'\x67\x51\x6d\x51\x6a':A(RE.C),'\x4f\x7a\x42\x6e\x67':function(c,N){return c(N);},'\x4d\x66\x6a\x72\x45':function(c,N,S,q){return c(N,S,q);},'\x67\x78\x4a\x4a\x65':function(c,N){return c!=N;},'\x5a\x71\x70\x45\x54':function(c,N){return c(N);},'\x58\x6d\x78\x4d\x42':A(RE.U),'\x69\x66\x73\x42\x71':A(RE.T),'\x6c\x47\x79\x74\x75':function(c,N,S){return c(N,S);},'\x45\x6e\x76\x41\x78':function(c,N){return c>N;},'\x54\x76\x6d\x49\x77':A(RE.z)+A(RE.P)+A(RE.e)+A(RE.L)+A(RE.o)+'\x74','\x57\x43\x70\x78\x67':A(RE.l)+A(RE.f)+A(RE.V)+A(RE.m)+A(RE.j)+A(RE.c),'\x59\x65\x77\x56\x48':A(RE.N),'\x64\x6f\x4b\x74\x4b':function(c,N){return c(N);}};let {EVENT_NAMES:O,request:w,on:g,send:h,env:E,version:C,currentScriptInfo:U,utils:T}=globalThis['\x6c\x78'],z=(c,N)=>{const i=A;switch(c){case'\x74\x78':case'\x77\x79':case'\x6b\x77':return N[i(R8.p)];case'\x6b\x67':return N[i(R8.O)];case'\x6d\x67':return N[i(R8.w)+'\x64'];}throw p[i(R8.r)](Error,p[i(R8.g)]);},P={'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':A(RE.S)+E,'\x76\x65\x72':C,'\x73\x6f\x75\x72\x63\x65\x2d\x76\x65\x72':U[A(RE.q)]};p[A(RE.y)](g,O[A(RE.G)],({source:c,action:N,info:{musicInfo:S,type:q}})=>{const Rp={p:'\x30\x78\x31\x65\x32',O:'\x30\x78\x32\x30\x32',w:0x1d6,r:'\x30\x78\x31\x66\x35',g:0x1eb,h:'\x30\x78\x32\x32\x31',E:'\x30\x78\x31\x65\x61',u:0x1d2,C:'\x30\x78\x32\x30\x34',U:0x1f2,T:'\x30\x78\x32\x32\x35',z:'\x30\x78\x32\x31\x31',P:0x1ef},RZ={p:0x1ec},RR={p:'\x30\x78\x31\x66\x31'},J=A,y={'\x6f\x71\x46\x43\x6e':function(G,F,K){const B=Z;return p[B(R9.p)](G,F,K);},'\x70\x6d\x66\x42\x68':p[J(RO.p)],'\x57\x78\x71\x6e\x50':function(G,F,K,b){const x=J;return p[x(RR.p)](G,F,K,b);},'\x4d\x59\x67\x79\x75':function(G,F){const W=J;return p[W(RZ.p)](G,F);},'\x71\x73\x4f\x54\x7a':p[J(RO.O)],'\x77\x73\x77\x49\x49':p[J(RO.w)]};if(p[J(RO.r)](p[J(RO.g)],N))throw p[J(RO.h)](Error,p[J(RO.E)]);return new Promise((G,F)=>{const Y=J;let K=Y(Rp.p)+c+'\x2f'+y[Y(Rp.O)](z,c,S)+'\x2f'+q;P[Y(Rp.w)]=T[Y(Rp.r)][Y(Rp.g)+'\x67'](T[Y(Rp.r)][Y(Rp.h)](JSON[Y(Rp.E)](K[Y(Rp.u)](/(?:\d\w)+/g),null,-0xb75*0x3+0x314+-0x4*-0x7d3)),y[Y(Rp.C)]),y[Y(Rp.U)](w,y[Y(Rp.T)](y[Y(Rp.z)],K),{'\x6d\x65\x74\x68\x6f\x64':y[Y(Rp.P)],'\x68\x65\x61\x64\x65\x72\x73':P},(b,D)=>b?F(b):0xa*-0x2d2+0x1*-0xb4b+0x277f!==D[Y('\x30\x78\x31\x64\x61')][Y(0x20a)]?F(Error(D[Y(0x1da)][Y('\x30\x78\x31\x65\x64')])):void G(D[Y('\x30\x78\x31\x64\x61')][Y(0x20e)]));});});let L=c=>new Promise((N,S)=>{const Rw={p:'\x30\x78\x31\x64\x61',O:0x1ce,w:'\x30\x78\x31\x66\x61',r:0x220,g:'\x30\x78\x32\x31\x36',h:0x1da,E:0x1ce,u:0x21e,C:0x201,U:0x1ce,T:'\x30\x78\x31\x64\x61',z:'\x30\x78\x32\x32\x30'},a=A;p[a(Rr.p)](w,c,{'\x6d\x65\x74\x68\x6f\x64':p[a(Rr.O)]},(q,y,G)=>{const Q=a;if(q||!y[Q(Rw.p)][Q(Rw.O)])return p[Q(Rw.w)](S,p[Q(Rw.r)](Error,p[Q(Rw.g)]));(G=y[Q(Rw.h)][Q(Rw.E)]?.[U[Q(Rw.u)]])?p[Q(Rw.C)](N,{'\x73':G['\x73'],'\x6d':G['\x6d'],'\x6c\x76':y[Q(Rw.p)][Q(Rw.U)]['\x6c\x76'],'\x6c\x75':y[Q(Rw.T)][Q(Rw.O)]['\x6c\x75'],'\x6c\x68':y[Q(Rw.T)][Q(Rw.E)]['\x6c\x68']}):p[Q(Rw.z)](N,null);});}),V=[p[A(RE.F)],p[A(RE.K)]],j={'\x73':p[A(RE.b)]};Promise[A(RE.t)]([p[A(RE.D)](L,V[-0x62c+0x7*-0x482+0x25ba]),p[A(RE.Ru)](L,V[0x241*0x3+-0x15de+0xf1c])])[A(RE.RC)](c=>{j=c;})[A(RE.RU)](()=>{const s=A;if(!j||j['\x6d']&&p[s(Rh.p)](T[s(Rh.O)][s(Rh.w)](U[s(Rh.r)][s(Rh.g)]()),j['\x6d']))throw p[s(Rh.h)](Error,p[s(Rh.E)]);let c={};for(let S of j['\x73'][s(Rh.g)]()[s(Rh.u)]('\x26'))c[(S=S[s(Rh.C)]('\x7c'))[s(Rh.U)]()]={'\x74\x79\x70\x65':p[s(Rh.T)],'\x61\x63\x74\x69\x6f\x6e\x73':[p[s(Rh.z)]],'\x71\x75\x61\x6c\x69\x74\x79\x73':S};const N={};N[s(Rh.P)]=c,(p[s(Rh.e)](h,O[s(Rh.L)],N),j['\x6c\x76']&&p[s(Rh.o)](p[s(Rh.l)](parseInt,j['\x6c\x76']),p[s(Rh.f)](parseInt,U[s(Rh.V)]))&&p[s(Rh.m)](h,O[s(Rh.j)+'\x74'],{'\x6c\x6f\x67':j['\x6c\x75'],'\x75\x70\x64\x61\x74\x65\x55\x72\x6c':j['\x6c\x68']}));});})())); 6 | -------------------------------------------------------------------------------- /flower-v1.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @name 野花🌷 3 | * @version 1 4 | */ 5 | (function(p,O){const d={p:0xfe,O:'\x30\x78\x31\x30\x65',w:'\x30\x78\x31\x31\x63',r:0x109,g:0xc3,h:0xb6,E:0x117,u:0x112,C:'\x30\x78\x31\x30\x61',U:0xdf,T:0xe5},v=Z,w=p();while(!![]){try{const r=-parseInt(v(d.p))/(-0x15*0x121+-0x168b+0x3*0xf6b)*(-parseInt(v(d.O))/(-0x1*0xec6+0x3*-0x41f+0x1b25*0x1))+parseInt(v(d.w))/(0x1e01*0x1+0x844*0x3+-0x1*0x36ca)+parseInt(v(d.r))/(-0x25+0x7c6+-0x79d)*(parseInt(v(d.g))/(-0x422*-0x3+0x9*0x2c+0x2c9*-0x5))+-parseInt(v(d.h))/(0x10fe+0xd65*0x1+-0x1e5d*0x1)+-parseInt(v(d.E))/(-0x19*0x82+-0x4f*-0x7d+-0x3*0x89e)+parseInt(v(d.u))/(-0x1cc9+0x1746+0x2b*0x21)*(parseInt(v(d.C))/(0x1460+-0x1787+-0x66*-0x8))+-parseInt(v(d.U))/(-0x67*-0x25+-0x25e4+0x170b*0x1)*(parseInt(v(d.T))/(-0x3*0xcaa+0x1a1d+0x1b4*0x7));if(r===O)break;else w['push'](w['shift']());}catch(g){w['push'](w['shift']());}}}(R,-0x658f*-0x11+0x78e4a+-0xf38*0x71),((()=>{const Ro={p:'\x30\x78\x66\x39',O:'\x30\x78\x65\x30',w:'\x30\x78\x31\x30\x63',r:'\x30\x78\x64\x35',g:0xe6,h:'\x30\x78\x66\x37',E:'\x30\x78\x63\x35',u:'\x30\x78\x31\x30\x30',C:'\x30\x78\x66\x33',U:0xe8,T:'\x30\x78\x64\x34',z:0xe2,P:0x110,e:'\x30\x78\x31\x30\x66',L:0xd0,o:0x107,l:'\x30\x78\x65\x32',f:0x110,V:0xee,m:0xf1,j:'\x30\x78\x65\x61',c:'\x30\x78\x31\x30\x64',N:'\x30\x78\x66\x64',S:0x105,q:0xec,y:0xde,G:'\x30\x78\x31\x30\x32',F:'\x30\x78\x62\x61',K:0x118,b:'\x30\x78\x64\x31',t:'\x30\x78\x65\x34',D:0xff,Rl:0xd8,Rf:0x108,RV:0xdc,Rm:'\x30\x78\x66\x32',Rj:'\x30\x78\x63\x37',Rc:'\x30\x78\x63\x31'},RL={p:0xd7,O:'\x30\x78\x31\x30\x34',w:'\x30\x78\x66\x30',r:'\x30\x78\x66\x35',g:0xef,h:0xf2,E:'\x30\x78\x62\x64',u:'\x30\x78\x65\x66',C:0xcf,U:'\x30\x78\x63\x66',T:'\x30\x78\x66\x61',z:'\x30\x78\x31\x31\x64',P:0xdb,e:'\x30\x78\x66\x34',L:0x11a,o:'\x30\x78\x62\x66',l:0xe3,f:'\x30\x78\x31\x31\x34',V:'\x30\x78\x66\x38',m:'\x30\x78\x62\x61',j:'\x30\x78\x64\x39',c:'\x30\x78\x31\x31\x33'},RP={p:0xdd,O:'\x30\x78\x62\x62',w:0xbe},Ru={p:0xb9,O:'\x30\x78\x65\x31',w:0xbe,r:0xed,g:0xdb,h:'\x30\x78\x31\x30\x31',E:0xcd},Rh={p:0xca},Rr={p:0xd9},Rw={p:'\x30\x78\x63\x63',O:0x116,w:0xb8,r:0xc9,g:0xc4},A=Z,p={'\x64\x63\x41\x4c\x4e':function(c,N){return c(N);},'\x42\x4d\x51\x46\x62':A(Ro.p),'\x6e\x42\x66\x48\x77':function(c,N,S){return c(N,S);},'\x6e\x59\x61\x68\x77':A(Ro.O),'\x6d\x44\x42\x63\x4e':function(c,N,S,q){return c(N,S,q);},'\x66\x44\x6d\x6b\x4b':function(c,N){return c+N;},'\x62\x46\x74\x70\x48':A(Ro.w)+A(Ro.r)+A(Ro.g),'\x51\x5a\x6b\x43\x73':A(Ro.h),'\x43\x70\x6d\x41\x48':function(c,N){return c!=N;},'\x6f\x64\x79\x51\x6a':A(Ro.E),'\x67\x73\x68\x48\x57':function(c,N){return c(N);},'\x7a\x52\x4f\x4c\x41':A(Ro.u),'\x55\x6d\x58\x45\x72':function(c,N){return c(N);},'\x64\x61\x73\x53\x4a':A(Ro.C),'\x78\x67\x48\x50\x7a':function(c,N){return c(N);},'\x53\x61\x56\x6e\x77':function(c,N){return c(N);},'\x47\x49\x59\x49\x66':function(c,N,S,q){return c(N,S,q);},'\x48\x78\x73\x53\x71':function(c,N){return c!=N;},'\x4a\x73\x6f\x58\x66':A(Ro.U),'\x4b\x78\x44\x50\x78':A(Ro.T),'\x4a\x46\x67\x43\x65':function(c,N,S){return c(N,S);},'\x45\x49\x71\x61\x54':function(c,N){return c>N;},'\x4d\x6e\x50\x55\x67':function(c,N){return c(N);},'\x72\x4a\x59\x4c\x75':function(c,N){return c(N);},'\x41\x51\x49\x76\x5a':function(c,N,S){return c(N,S);},'\x50\x65\x68\x78\x62':A(Ro.z)+A(Ro.P)+A(Ro.e)+A(Ro.L)+A(Ro.o)+'\x73\x74','\x43\x69\x58\x57\x4d':A(Ro.l)+A(Ro.f)+A(Ro.V)+A(Ro.m)+A(Ro.j)+A(Ro.c),'\x4b\x48\x4d\x55\x4e':A(Ro.N)+A(Ro.S)+A(Ro.q)+A(Ro.y),'\x74\x73\x67\x6e\x64':function(c,N){return c(N);}};let {EVENT_NAMES:O,request:w,on:g,send:h,env:E,version:C,currentScriptInfo:U,utils:T}=globalThis['\x6c\x78'],z=(c,N)=>{const i=A;switch(c){case'\x74\x78':case'\x77\x79':case'\x6b\x77':return N[i(Rw.p)];case'\x6b\x67':return N[i(Rw.O)];case'\x6d\x67':return N[i(Rw.w)+'\x64'];}throw p[i(Rw.r)](Error,p[i(Rw.g)]);},P={'\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74':A(Ro.G)+E,'\x76\x65\x72':C,'\x73\x6f\x75\x72\x63\x65\x2d\x76\x65\x72':U[A(Ro.F)]};p[A(Ro.K)](g,O[A(Ro.b)],({source:c,action:N,info:{musicInfo:S,type:q}})=>{const RE={p:'\x30\x78\x63\x65',O:0xe9,w:'\x30\x78\x64\x32',r:0x119,g:'\x30\x78\x63\x38',h:0x119,E:0xfc,u:'\x30\x78\x31\x31\x35',C:'\x30\x78\x63\x62',U:0xda,T:0xeb,z:'\x30\x78\x62\x37',P:0xe7,e:0x106},Rg={p:0xfb},J=A,y={'\x74\x53\x71\x51\x6f':function(G,F,K){const B=Z;return p[B(Rr.p)](G,F,K);},'\x65\x72\x45\x73\x57':p[J(Ru.p)],'\x78\x42\x41\x57\x4f':function(G,F,K,b){const x=J;return p[x(Rg.p)](G,F,K,b);},'\x72\x62\x72\x71\x66':function(G,F){const W=J;return p[W(Rh.p)](G,F);},'\x41\x62\x61\x63\x4a':p[J(Ru.O)],'\x4d\x76\x7a\x48\x46':p[J(Ru.w)]};if(p[J(Ru.r)](p[J(Ru.g)],N))throw p[J(Ru.h)](Error,p[J(Ru.E)]);return new Promise((G,F)=>{const Y=J;let K=Y(RE.p)+c+'\x2f'+y[Y(RE.O)](z,c,S)+'\x2f'+q;P[Y(RE.w)]=T[Y(RE.r)][Y(RE.g)+'\x67'](T[Y(RE.h)][Y(RE.E)](JSON[Y(RE.u)](K[Y(RE.C)](/(?:\d\w)+/g),null,0x216b+0x1224+-0x338e)),y[Y(RE.U)]),y[Y(RE.T)](w,y[Y(RE.z)](y[Y(RE.P)],K),{'\x6d\x65\x74\x68\x6f\x64':y[Y(RE.e)],'\x68\x65\x61\x64\x65\x72\x73':P},(b,D)=>b?F(b):0x1e52+0x2476+-0x42c8!==D[Y(0x11b)][Y(0xd6)]?F(Error(D[Y(0x11b)][Y(0xf6)])):void G(D[Y(0x11b)][Y(0x103)]));});});let L=c=>new Promise((N,S)=>{const Rz={p:'\x30\x78\x31\x31\x62',O:'\x30\x78\x63\x36',w:0xbc,r:0xbc,g:'\x30\x78\x31\x31\x31',h:'\x30\x78\x31\x31\x62',E:0xc6,u:'\x30\x78\x62\x61',C:0xc2,U:0x11b,T:'\x30\x78\x63\x36',z:0xc0},RT={p:'\x30\x78\x64\x33'},RU={p:0x10b},RC={p:'\x30\x78\x66\x32'},Q=A,q={'\x71\x57\x49\x57\x44':function(y,G){const a=Z;return p[a(RC.p)](y,G);},'\x59\x4e\x4f\x65\x45':p[Q(RP.p)],'\x77\x75\x63\x4c\x7a':function(y,G){const s=Q;return p[s(RU.p)](y,G);},'\x47\x61\x6d\x46\x4f':function(y,G){const H=Q;return p[H(RT.p)](y,G);}};p[Q(RP.O)](w,c,{'\x6d\x65\x74\x68\x6f\x64':p[Q(RP.w)]},(y,G,F)=>{const I=Q;if(y||!G[I(Rz.p)][I(Rz.O)])return q[I(Rz.w)](S,q[I(Rz.r)](Error,q[I(Rz.g)]));(F=G[I(Rz.h)][I(Rz.E)]?.[U[I(Rz.u)]])?q[I(Rz.C)](N,{'\x73':F['\x73'],'\x6d':F['\x6d'],'\x6c\x76':G[I(Rz.U)][I(Rz.O)]['\x6c\x76'],'\x6c\x75':G[I(Rz.U)][I(Rz.O)]['\x6c\x75'],'\x6c\x68':G[I(Rz.p)][I(Rz.T)]['\x6c\x68']}):q[I(Rz.z)](N,null);});}),V=[p[A(Ro.t)],p[A(Ro.D)]],j={'\x73':p[A(Ro.Rl)]};Promise[A(Ro.Rf)]([p[A(Ro.RV)](L,V[-0x1*-0x134e+0x3*-0xcdc+0x1346]),p[A(Ro.Rm)](L,V[-0x12c4+0x1e65+-0xba0])])[A(Ro.Rj)](c=>{j=c;})[A(Ro.Rc)](()=>{const k=A;if(!j||j['\x6d']&&p[k(RL.p)](T[k(RL.O)][k(RL.w)](U[k(RL.r)][k(RL.g)]()),j['\x6d']))throw p[k(RL.h)](Error,p[k(RL.E)]);let c={};for(let S of j['\x73'][k(RL.u)]()[k(RL.C)]('\x26'))c[(S=S[k(RL.U)]('\x7c'))[k(RL.T)]()]={'\x74\x79\x70\x65':p[k(RL.z)],'\x61\x63\x74\x69\x6f\x6e\x73':[p[k(RL.P)]],'\x71\x75\x61\x6c\x69\x74\x79\x73':S};const N={};N[k(RL.e)]=c,(p[k(RL.L)](h,O[k(RL.o)],N),j['\x6c\x76']&&p[k(RL.l)](p[k(RL.f)](parseInt,j['\x6c\x76']),p[k(RL.V)](parseInt,U[k(RL.m)]))&&p[k(RL.j)](h,O[k(RL.c)+'\x74'],{'\x6c\x6f\x67':j['\x6c\x75'],'\x75\x70\x64\x61\x74\x65\x55\x72\x6c':j['\x6c\x68']}));});})()));function Z(p,O){const w=R();return Z=function(r,g){r=r-(-0x914+-0xf05+0x18cf);let h=w[r];return h;},Z(p,O);}function R(){const Rl=['\x6b\x77\x7c\x31\x32\x38\x6b\x26\x77\x79','\x37\x71\x7a\x7a\x72\x4a\x64','\x43\x69\x58\x57\x4d','\x66\x69\x61\x6c\x65\x64','\x67\x73\x68\x48\x57','\x6c\x78\x2d\x6d\x75\x73\x69\x63\x2f','\x64\x61\x74\x61','\x63\x72\x79\x70\x74\x6f','\x7c\x31\x32\x38\x6b\x26\x6d\x67\x7c\x31','\x4d\x76\x7a\x48\x46','\x2d\x69\x6e\x66\x6f\x2f\x6c\x61\x74\x65','\x61\x6e\x79','\x34\x70\x7a\x65\x56\x52\x58','\x36\x30\x36\x39\x36\x31\x38\x79\x72\x43\x6a\x74\x53','\x78\x67\x48\x50\x7a','\x68\x74\x74\x70\x3a\x2f\x2f\x39\x37\x2e','\x6c\x61\x74\x65\x73\x74','\x38\x34\x32\x34\x34\x51\x55\x55\x6f\x70\x77','\x6a\x73\x2e\x6f\x72\x67\x2f\x66\x6c\x6f','\x67\x69\x73\x74\x72\x79\x2e\x6e\x70\x6d','\x59\x4e\x4f\x65\x45','\x38\x75\x47\x47\x55\x49\x51','\x75\x70\x64\x61\x74\x65\x41\x6c\x65\x72','\x4d\x6e\x50\x55\x67','\x73\x74\x72\x69\x6e\x67\x69\x66\x79','\x68\x61\x73\x68','\x34\x35\x36\x32\x35\x35\x38\x48\x4b\x44\x6f\x67\x6c','\x41\x51\x49\x76\x5a','\x62\x75\x66\x66\x65\x72','\x4a\x46\x67\x43\x65','\x62\x6f\x64\x79','\x31\x37\x34\x36\x39\x37\x32\x78\x67\x71\x46\x62\x47','\x4b\x78\x44\x50\x78','\x34\x33\x32\x36\x35\x34\x36\x4a\x75\x6a\x66\x66\x51','\x72\x62\x72\x71\x66','\x63\x6f\x70\x79\x72\x69\x67\x68\x74\x49','\x6e\x59\x61\x68\x77','\x76\x65\x72\x73\x69\x6f\x6e','\x47\x49\x59\x49\x66','\x71\x57\x49\x57\x44','\x4a\x73\x6f\x58\x66','\x51\x5a\x6b\x43\x73','\x69\x6e\x69\x74\x65\x64','\x47\x61\x6d\x46\x4f','\x66\x69\x6e\x61\x6c\x6c\x79','\x77\x75\x63\x4c\x7a','\x34\x31\x30\x34\x31\x38\x30\x66\x69\x6a\x49\x62\x41','\x42\x4d\x51\x46\x62','\x6d\x75\x73\x69\x63\x55\x72\x6c','\x76\x69\x6e\x66\x6f','\x74\x68\x65\x6e','\x62\x75\x66\x54\x6f\x53\x74\x72\x69\x6e','\x64\x63\x41\x4c\x4e','\x66\x44\x6d\x6b\x4b','\x6d\x61\x74\x63\x68','\x73\x6f\x6e\x67\x6d\x69\x64','\x7a\x52\x4f\x4c\x41','\x2f\x75\x72\x6c\x2f','\x73\x70\x6c\x69\x74','\x77\x65\x72\x2d\x73\x6f\x75\x72\x63\x65','\x72\x65\x71\x75\x65\x73\x74','\x74\x61\x67','\x53\x61\x56\x6e\x77','\x6d\x75\x73\x69\x63','\x36\x34\x2e\x33\x37\x2e\x32\x33\x35\x2f','\x63\x6f\x64\x65','\x48\x78\x73\x53\x71','\x4b\x48\x4d\x55\x4e','\x6e\x42\x66\x48\x77','\x65\x72\x45\x73\x57','\x6f\x64\x79\x51\x6a','\x74\x73\x67\x6e\x64','\x64\x61\x73\x53\x4a','\x6b\x26\x6b\x67\x7c\x31\x32\x38\x6b','\x34\x37\x30\x6a\x68\x48\x6d\x56\x4d','\x68\x65\x78','\x62\x46\x74\x70\x48','\x68\x74\x74\x70\x73\x3a\x2f\x2f\x72\x65','\x45\x49\x71\x61\x54','\x50\x65\x68\x78\x62','\x31\x31\x37\x36\x33\x34\x4b\x52\x51\x68\x46\x49','\x66\x6c\x6f\x77\x65\x72\x2f\x76\x31','\x41\x62\x61\x63\x4a','\u670d\u52a1\u5668\u5f02\u5e38','\x74\x53\x71\x51\x6f','\x75\x72\x63\x65\x2d\x69\x6e\x66\x6f\x2f','\x78\x42\x41\x57\x4f','\x32\x38\x6b\x26\x74\x78\x7c\x31\x32\x38','\x43\x70\x6d\x41\x48','\x6d\x69\x72\x72\x6f\x72\x2e\x63\x6f\x6d','\x74\x72\x69\x6d','\x6d\x64\x35','\x2f\x66\x6c\x6f\x77\x65\x72\x2d\x73\x6f','\x55\x6d\x58\x45\x72','\x46\x41\x49\x4c\x45\x44','\x73\x6f\x75\x72\x63\x65\x73','\x72\x61\x77\x53\x63\x72\x69\x70\x74','\x6d\x73\x67','\x47\x45\x54','\x72\x4a\x59\x4c\x75','\x66\x61\x69\x6c\x65\x64','\x73\x68\x69\x66\x74','\x6d\x44\x42\x63\x4e','\x66\x72\x6f\x6d'];R=function(){return Rl;};return R();} 6 | -------------------------------------------------------------------------------- /lx-music-source-free.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name 肥猫 3 | * @description 肥猫 4 | * @version 肥猫 5 | * @author 肥猫 6 | * @repository 肥猫 7 | */ 8 | 9 | // 是否开启开发模式 10 | const DEV_ENABLE = false 11 | // 服务端地址 12 | const API_URL = "http://fatcat.dns.army" 13 | // 服务端配置的请求key 14 | const API_KEY = `114514` 15 | // 音质配置(key为音源名称,不要乱填.如果你账号为VIP可以填写到hires) 16 | // 全部的支持值: ['128k', '320k', 'flac', 'flac24bit'] 17 | const MUSIC_QUALITY = JSON.parse('{"kw":["128k","320k","flac"],"kg":["128k"],"tx":["128k"],"wy":["128k"],"mg":["128k"]}') 18 | // 音源配置(默认为自动生成,可以修改为手动) 19 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 20 | MUSIC_SOURCE.push('local') 21 | 22 | /** 23 | * 下面的东西就不要修改了 24 | */ 25 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 26 | 27 | /** 28 | * URL请求 29 | * 30 | * @param {string} url - 请求的地址 31 | * @param {object} options - 请求的配置文件 32 | * @return {Promise} 携带响应体的Promise对象 33 | */ 34 | const httpFetch = (url, options = { method: 'GET' }) => { 35 | return new Promise((resolve, reject) => { 36 | console.log('--- start --- ' + url) 37 | request(url, options, (err, resp) => { 38 | if (err) return reject(err) 39 | console.log('API Response: ', resp) 40 | resolve(resp) 41 | }) 42 | }) 43 | } 44 | 45 | /** 46 | * Encodes the given data to base64. 47 | * 48 | * @param {type} data - the data to be encoded 49 | * @return {string} the base64 encoded string 50 | */ 51 | const handleBase64Encode = (data) => { 52 | var data = utils.buffer.from(data, 'utf-8') 53 | return utils.buffer.bufToString(data, 'base64') 54 | } 55 | 56 | /** 57 | * 58 | * @param {string} source - 音源 59 | * @param {object} musicInfo - 歌曲信息 60 | * @param {string} quality - 音质 61 | * @returns {Promise} 歌曲播放链接 62 | * @throws {Error} - 错误消息 63 | */ 64 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 65 | if (source == 'local') { 66 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 67 | const songId = musicInfo.songmid 68 | const requestBody = { 69 | p: songId.replace('server_', ''), 70 | } 71 | var t = 'c' 72 | var b = handleBase64Encode(JSON.stringify(requestBody)) /* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 73 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 74 | const request = await httpFetch(targetUrl, { 75 | method: 'GET', 76 | headers: { 77 | 'Content-Type': 'application/json', 78 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 79 | 'X-Request-Key': API_KEY, 80 | }, 81 | follow_max: 5, 82 | }) 83 | const { body } = request 84 | if (body.code == 0 && body.data && body.data.file) { 85 | var t = 'u' 86 | var b = handleBase64Encode(JSON.stringify(requestBody)) /* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 87 | return `${API_URL}/local/${t}?q=${b}` 88 | } 89 | throw new Error('404 Not Found') 90 | } 91 | 92 | const songId = musicInfo.hash ?? musicInfo.songmid 93 | 94 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 95 | method: 'GET', 96 | headers: { 97 | 'Content-Type': 'application/json', 98 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 99 | 'X-Request-Key': API_KEY, 100 | }, 101 | follow_max: 5, 102 | }) 103 | const { body } = request 104 | 105 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 106 | if (env != 'mobile') console.groupEnd() 107 | switch (body.code) { 108 | case 0: 109 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) success, URL: ${body.data}`) 110 | return body.data 111 | case 1: 112 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed: ip被封禁`) 113 | throw new Error('block ip') 114 | case 2: 115 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg}`) 116 | throw new Error('get music url failed') 117 | case 4: 118 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 远程服务器错误`) 119 | throw new Error('internal server error') 120 | case 5: 121 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求过于频繁,请休息一下吧`) 122 | throw new Error('too many requests') 123 | case 6: 124 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求参数错误`) 125 | throw new Error('param error') 126 | default: 127 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg ? body.msg : 'unknow error'}`) 128 | throw new Error(body.msg ?? 'unknow error') 129 | } 130 | } 131 | 132 | const handleGetMusicPic = async (source, musicInfo) => { 133 | switch (source) { 134 | case 'local': 135 | // 先从服务器检查是否有对应的类型,再响应链接 136 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 137 | const songId = musicInfo.songmid 138 | const requestBody = { 139 | p: songId.replace('server_', ''), 140 | } 141 | var t = 'c' 142 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 143 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 144 | const request = await httpFetch(targetUrl, { 145 | method: 'GET', 146 | headers: { 147 | 'Content-Type': 'application/json', 148 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 149 | }, 150 | follow_max: 5, 151 | }) 152 | const { body } = request 153 | if (body.code === 0 && body.data.cover) { 154 | var t = 'p' 155 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 156 | return `${API_URL}/local/${t}?q=${b}` 157 | } 158 | throw new Error('get music pic failed') 159 | default: 160 | throw new Error('action(pic) does not support source(' + source + ')') 161 | } 162 | } 163 | 164 | const handleGetMusicLyric = async (source, musicInfo) => { 165 | switch (source) { 166 | case 'local': 167 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 168 | const songId = musicInfo.songmid 169 | const requestBody = { 170 | p: songId.replace('server_', ''), 171 | } 172 | var t = 'c' 173 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 174 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 175 | const request = await httpFetch(targetUrl, { 176 | method: 'GET', 177 | headers: { 178 | 'Content-Type': 'application/json', 179 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 180 | }, 181 | follow_max: 5, 182 | }) 183 | const { body } = request 184 | if (body.code === 0 && body.data.lyric) { 185 | var t = 'l' 186 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 187 | const request2 = await httpFetch(`${API_URL}/local/${t}?q=${b}`, { 188 | method: 'GET', 189 | headers: { 190 | 'Content-Type': 'application/json', 191 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 192 | }, 193 | follow_max: 5, 194 | }) 195 | if (request2.body.code === 0) { 196 | return { 197 | lyric: request2.body.data ?? "", 198 | tlyric: "", 199 | rlyric: "", 200 | lxlyric: "" 201 | } 202 | } 203 | throw new Error('get music lyric failed') 204 | } 205 | throw new Error('get music lyric failed') 206 | default: 207 | throw new Error('action(lyric) does not support source(' + source + ')') 208 | } 209 | } 210 | 211 | // 生成歌曲信息 212 | const musicSources = {} 213 | MUSIC_SOURCE.forEach(item => { 214 | musicSources[item] = { 215 | name: item, 216 | type: 'music', 217 | actions: (item == 'local') ? ['musicUrl', 'pic', 'lyric'] : ['musicUrl'], 218 | qualitys: (item == 'local') ? [] : MUSIC_QUALITY[item], 219 | } 220 | }) 221 | 222 | // 监听 LX Music 请求事件 223 | on(EVENT_NAMES.request, ({ action, source, info }) => { 224 | switch (action) { 225 | case 'musicUrl': 226 | if (env != 'mobile') { 227 | console.group(`Handle Action(musicUrl)`) 228 | console.log('source', source) 229 | console.log('quality', info.type) 230 | console.log('musicInfo', info.musicInfo) 231 | } else { 232 | console.log(`Handle Action(musicUrl)`) 233 | console.log('source', source) 234 | console.log('quality', info.type) 235 | console.log('musicInfo', info.musicInfo) 236 | } 237 | return handleGetMusicUrl(source, info.musicInfo, info.type) 238 | .then(data => Promise.resolve(data)) 239 | .catch(err => Promise.reject(err)) 240 | case 'pic': 241 | return handleGetMusicPic(source, info.musicInfo) 242 | .then(data => Promise.resolve(data)) 243 | .catch(err => Promise.reject(err)) 244 | case 'lyric': 245 | return handleGetMusicLyric(source, info.musicInfo) 246 | .then(data => Promise.resolve(data)) 247 | .catch(err => Promise.reject(err)) 248 | default: 249 | console.error(`action(${action}) not support`) 250 | return Promise.reject('action not support') 251 | } 252 | }) 253 | 254 | // 向 LX Music 发送初始化成功事件 255 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) 256 | -------------------------------------------------------------------------------- /肥猫不肥.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name 肥猫不肥 3 | * @description 肥猫不肥 4 | * @version 肥猫不肥 5 | * @author 肥猫不肥 6 | * @repository 肥猫不肥 7 | */ 8 | 9 | // 是否开启开发模式 10 | const DEV_ENABLE = false 11 | // 服务端地址 12 | const API_URL = "http://music.xn--z7x900a.live" 13 | // 服务端配置的请求key 14 | const API_KEY = `114514` 15 | // 音质配置(key为音源名称,不要乱填.如果你账号为VIP可以填写到hires) 16 | // 全部的支持值: ['128k', '320k', 'flac', 'flac24bit'] 17 | const MUSIC_QUALITY = JSON.parse('{"kw":["128k","320k","flac"],"kg":["128k"],"tx":["128k"],"wy":["128k"],"mg":["128k"]}') 18 | // 音源配置(默认为自动生成,可以修改为手动) 19 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 20 | MUSIC_SOURCE.push('local') 21 | 22 | /** 23 | * 下面的东西就不要修改了 24 | */ 25 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 26 | 27 | /** 28 | * URL请求 29 | * 30 | * @param {string} url - 请求的地址 31 | * @param {object} options - 请求的配置文件 32 | * @return {Promise} 携带响应体的Promise对象 33 | */ 34 | const httpFetch = (url, options = { method: 'GET' }) => { 35 | return new Promise((resolve, reject) => { 36 | console.log('--- start --- ' + url) 37 | request(url, options, (err, resp) => { 38 | if (err) return reject(err) 39 | console.log('API Response: ', resp) 40 | resolve(resp) 41 | }) 42 | }) 43 | } 44 | 45 | /** 46 | * Encodes the given data to base64. 47 | * 48 | * @param {type} data - the data to be encoded 49 | * @return {string} the base64 encoded string 50 | */ 51 | const handleBase64Encode = (data) => { 52 | var data = utils.buffer.from(data, 'utf-8') 53 | return utils.buffer.bufToString(data, 'base64') 54 | } 55 | 56 | /** 57 | * 58 | * @param {string} source - 音源 59 | * @param {object} musicInfo - 歌曲信息 60 | * @param {string} quality - 音质 61 | * @returns {Promise} 歌曲播放链接 62 | * @throws {Error} - 错误消息 63 | */ 64 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 65 | if (source == 'local') { 66 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 67 | const songId = musicInfo.songmid 68 | const requestBody = { 69 | p: songId.replace('server_', ''), 70 | } 71 | var t = 'c' 72 | var b = handleBase64Encode(JSON.stringify(requestBody)) /* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 73 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 74 | const request = await httpFetch(targetUrl, { 75 | method: 'GET', 76 | headers: { 77 | 'Content-Type': 'application/json', 78 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 79 | 'X-Request-Key': API_KEY, 80 | }, 81 | follow_max: 5, 82 | }) 83 | const { body } = request 84 | if (body.code == 0 && body.data && body.data.file) { 85 | var t = 'u' 86 | var b = handleBase64Encode(JSON.stringify(requestBody)) /* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 87 | return `${API_URL}/local/${t}?q=${b}` 88 | } 89 | throw new Error('404 Not Found') 90 | } 91 | 92 | const songId = musicInfo.hash ?? musicInfo.songmid 93 | 94 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 95 | method: 'GET', 96 | headers: { 97 | 'Content-Type': 'application/json', 98 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 99 | 'X-Request-Key': API_KEY, 100 | }, 101 | follow_max: 5, 102 | }) 103 | const { body } = request 104 | 105 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 106 | if (env != 'mobile') console.groupEnd() 107 | switch (body.code) { 108 | case 0: 109 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) success, URL: ${body.data}`) 110 | return body.data 111 | case 1: 112 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed: ip被封禁`) 113 | throw new Error('block ip') 114 | case 2: 115 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg}`) 116 | throw new Error('get music url failed') 117 | case 4: 118 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 远程服务器错误`) 119 | throw new Error('internal server error') 120 | case 5: 121 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求过于频繁,请休息一下吧`) 122 | throw new Error('too many requests') 123 | case 6: 124 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求参数错误`) 125 | throw new Error('param error') 126 | default: 127 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg ? body.msg : 'unknow error'}`) 128 | throw new Error(body.msg ?? 'unknow error') 129 | } 130 | } 131 | 132 | const handleGetMusicPic = async (source, musicInfo) => { 133 | switch (source) { 134 | case 'local': 135 | // 先从服务器检查是否有对应的类型,再响应链接 136 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 137 | const songId = musicInfo.songmid 138 | const requestBody = { 139 | p: songId.replace('server_', ''), 140 | } 141 | var t = 'c' 142 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 143 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 144 | const request = await httpFetch(targetUrl, { 145 | method: 'GET', 146 | headers: { 147 | 'Content-Type': 'application/json', 148 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 149 | }, 150 | follow_max: 5, 151 | }) 152 | const { body } = request 153 | if (body.code === 0 && body.data.cover) { 154 | var t = 'p' 155 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 156 | return `${API_URL}/local/${t}?q=${b}` 157 | } 158 | throw new Error('get music pic failed') 159 | default: 160 | throw new Error('action(pic) does not support source(' + source + ')') 161 | } 162 | } 163 | 164 | const handleGetMusicLyric = async (source, musicInfo) => { 165 | switch (source) { 166 | case 'local': 167 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 168 | const songId = musicInfo.songmid 169 | const requestBody = { 170 | p: songId.replace('server_', ''), 171 | } 172 | var t = 'c' 173 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 174 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 175 | const request = await httpFetch(targetUrl, { 176 | method: 'GET', 177 | headers: { 178 | 'Content-Type': 'application/json', 179 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 180 | }, 181 | follow_max: 5, 182 | }) 183 | const { body } = request 184 | if (body.code === 0 && body.data.lyric) { 185 | var t = 'l' 186 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 187 | const request2 = await httpFetch(`${API_URL}/local/${t}?q=${b}`, { 188 | method: 'GET', 189 | headers: { 190 | 'Content-Type': 'application/json', 191 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 192 | }, 193 | follow_max: 5, 194 | }) 195 | if (request2.body.code === 0) { 196 | return { 197 | lyric: request2.body.data ?? "", 198 | tlyric: "", 199 | rlyric: "", 200 | lxlyric: "" 201 | } 202 | } 203 | throw new Error('get music lyric failed') 204 | } 205 | throw new Error('get music lyric failed') 206 | default: 207 | throw new Error('action(lyric) does not support source(' + source + ')') 208 | } 209 | } 210 | 211 | // 生成歌曲信息 212 | const musicSources = {} 213 | MUSIC_SOURCE.forEach(item => { 214 | musicSources[item] = { 215 | name: item, 216 | type: 'music', 217 | actions: (item == 'local') ? ['musicUrl', 'pic', 'lyric'] : ['musicUrl'], 218 | qualitys: (item == 'local') ? [] : MUSIC_QUALITY[item], 219 | } 220 | }) 221 | 222 | // 监听 LX Music 请求事件 223 | on(EVENT_NAMES.request, ({ action, source, info }) => { 224 | switch (action) { 225 | case 'musicUrl': 226 | if (env != 'mobile') { 227 | console.group(`Handle Action(musicUrl)`) 228 | console.log('source', source) 229 | console.log('quality', info.type) 230 | console.log('musicInfo', info.musicInfo) 231 | } else { 232 | console.log(`Handle Action(musicUrl)`) 233 | console.log('source', source) 234 | console.log('quality', info.type) 235 | console.log('musicInfo', info.musicInfo) 236 | } 237 | return handleGetMusicUrl(source, info.musicInfo, info.type) 238 | .then(data => Promise.resolve(data)) 239 | .catch(err => Promise.reject(err)) 240 | case 'pic': 241 | return handleGetMusicPic(source, info.musicInfo) 242 | .then(data => Promise.resolve(data)) 243 | .catch(err => Promise.reject(err)) 244 | case 'lyric': 245 | return handleGetMusicLyric(source, info.musicInfo) 246 | .then(data => Promise.resolve(data)) 247 | .catch(err => Promise.reject(err)) 248 | default: 249 | console.error(`action(${action}) not support`) 250 | return Promise.reject('action not support') 251 | } 252 | }) 253 | 254 | // 向 LX Music 发送初始化成功事件 255 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) 256 | -------------------------------------------------------------------------------- /ikun-source.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name ikun公益音源 3 | * @description 倒卖狗司马 4 | * @version 1.0.0 5 | * @author ikun 6 | * @repository https://github.com/lxmusics/lx-music-api-server 7 | */ 8 | 9 | // 是否开启开发模式 10 | const DEV_ENABLE = false 11 | // 服务端地址 12 | const API_URL = "http://110.41.172.118:9763" 13 | // 服务端配置的请求key 14 | const API_KEY = `hellolxmusicqwq` 15 | // 音质配置(key为音源名称,不要乱填.如果你账号为VIP可以填写到hires) 16 | // 全部的支持值: ['128k', '320k', 'flac', 'flac24bit'] 17 | const MUSIC_QUALITY = JSON.parse('{"kw":["128k","320k","flac"],"kg":["128k","320k","flac","flac24bit"],"tx":["128k","320k","flac","flac24bit"],"wy":["128k","320k"],"mg":["128k","320k"]}') 18 | // 音源配置(默认为自动生成,可以修改为手动) 19 | const MUSIC_SOURCE = Object.keys(MUSIC_QUALITY) 20 | MUSIC_SOURCE.push('local') 21 | 22 | /** 23 | * 下面的东西就不要修改了 24 | */ 25 | const { EVENT_NAMES, request, on, send, utils, env, version } = globalThis.lx 26 | 27 | /** 28 | * URL请求 29 | * 30 | * @param {string} url - 请求的地址 31 | * @param {object} options - 请求的配置文件 32 | * @return {Promise} 携带响应体的Promise对象 33 | */ 34 | const httpFetch = (url, options = { method: 'GET' }) => { 35 | return new Promise((resolve, reject) => { 36 | console.log('--- start --- ' + url) 37 | request(url, options, (err, resp) => { 38 | if (err) return reject(err) 39 | console.log('API Response: ', resp) 40 | resolve(resp) 41 | }) 42 | }) 43 | } 44 | 45 | /** 46 | * Encodes the given data to base64. 47 | * 48 | * @param {type} data - the data to be encoded 49 | * @return {string} the base64 encoded string 50 | */ 51 | const handleBase64Encode = (data) => { 52 | var data = utils.buffer.from(data, 'utf-8') 53 | return utils.buffer.bufToString(data, 'base64') 54 | } 55 | 56 | /** 57 | * 58 | * @param {string} source - 音源 59 | * @param {object} musicInfo - 歌曲信息 60 | * @param {string} quality - 音质 61 | * @returns {Promise} 歌曲播放链接 62 | * @throws {Error} - 错误消息 63 | */ 64 | const handleGetMusicUrl = async (source, musicInfo, quality) => { 65 | if (source == 'local') { 66 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 67 | const songId = musicInfo.songmid 68 | const requestBody = { 69 | p: songId.replace('server_', ''), 70 | } 71 | var t = 'c' 72 | var b = handleBase64Encode(JSON.stringify(requestBody)) /* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 73 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 74 | const request = await httpFetch(targetUrl, { 75 | method: 'GET', 76 | headers: { 77 | 'Content-Type': 'application/json', 78 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 79 | 'X-Request-Key': API_KEY, 80 | }, 81 | follow_max: 5, 82 | }) 83 | const { body } = request 84 | if (body.code == 0 && body.data && body.data.file) { 85 | var t = 'u' 86 | var b = handleBase64Encode(JSON.stringify(requestBody)) /* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 87 | return `${API_URL}/local/${t}?q=${b}` 88 | } 89 | throw new Error('404 Not Found') 90 | } 91 | 92 | const songId = musicInfo.hash ?? musicInfo.songmid 93 | 94 | const request = await httpFetch(`${API_URL}/url/${source}/${songId}/${quality}`, { 95 | method: 'GET', 96 | headers: { 97 | 'Content-Type': 'application/json', 98 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}`, 99 | 'X-Request-Key': API_KEY, 100 | }, 101 | follow_max: 5, 102 | }) 103 | const { body } = request 104 | 105 | if (!body || isNaN(Number(body.code))) throw new Error('unknow error') 106 | if (env != 'mobile') console.groupEnd() 107 | switch (body.code) { 108 | case 0: 109 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) success, URL: ${body.data}`) 110 | return body.data 111 | case 1: 112 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed: ip被封禁`) 113 | throw new Error('block ip') 114 | case 2: 115 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg}`) 116 | throw new Error('get music url failed') 117 | case 4: 118 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 远程服务器错误`) 119 | throw new Error('internal server error') 120 | case 5: 121 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求过于频繁,请休息一下吧`) 122 | throw new Error('too many requests') 123 | case 6: 124 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, 请求参数错误`) 125 | throw new Error('param error') 126 | default: 127 | console.log(`handleGetMusicUrl(${source}_${musicInfo.songmid}, ${quality}) failed, ${body.msg ? body.msg : 'unknow error'}`) 128 | throw new Error(body.msg ?? 'unknow error') 129 | } 130 | } 131 | 132 | const handleGetMusicPic = async (source, musicInfo) => { 133 | switch (source) { 134 | case 'local': 135 | // 先从服务器检查是否有对应的类型,再响应链接 136 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 137 | const songId = musicInfo.songmid 138 | const requestBody = { 139 | p: songId.replace('server_', ''), 140 | } 141 | var t = 'c' 142 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 143 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 144 | const request = await httpFetch(targetUrl, { 145 | method: 'GET', 146 | headers: { 147 | 'Content-Type': 'application/json', 148 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 149 | }, 150 | follow_max: 5, 151 | }) 152 | const { body } = request 153 | if (body.code === 0 && body.data.cover) { 154 | var t = 'p' 155 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 156 | return `${API_URL}/local/${t}?q=${b}` 157 | } 158 | throw new Error('get music pic failed') 159 | default: 160 | throw new Error('action(pic) does not support source(' + source + ')') 161 | } 162 | } 163 | 164 | const handleGetMusicLyric = async (source, musicInfo) => { 165 | switch (source) { 166 | case 'local': 167 | if (!musicInfo.songmid.startsWith('server_')) throw new Error('upsupported local file') 168 | const songId = musicInfo.songmid 169 | const requestBody = { 170 | p: songId.replace('server_', ''), 171 | } 172 | var t = 'c' 173 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 174 | const targetUrl = `${API_URL}/local/${t}?q=${b}` 175 | const request = await httpFetch(targetUrl, { 176 | method: 'GET', 177 | headers: { 178 | 'Content-Type': 'application/json', 179 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 180 | }, 181 | follow_max: 5, 182 | }) 183 | const { body } = request 184 | if (body.code === 0 && body.data.lyric) { 185 | var t = 'l' 186 | var b = handleBase64Encode(JSON.stringify(requestBody))/* url safe*/.replace(/\+/g, '-').replace(/\//g, '_') 187 | const request2 = await httpFetch(`${API_URL}/local/${t}?q=${b}`, { 188 | method: 'GET', 189 | headers: { 190 | 'Content-Type': 'application/json', 191 | 'User-Agent': `${env ? `lx-music-${env}/${version}` : `lx-music-request/${version}`}` 192 | }, 193 | follow_max: 5, 194 | }) 195 | if (request2.body.code === 0) { 196 | return { 197 | lyric: request2.body.data ?? "", 198 | tlyric: "", 199 | rlyric: "", 200 | lxlyric: "" 201 | } 202 | } 203 | throw new Error('get music lyric failed') 204 | } 205 | throw new Error('get music lyric failed') 206 | default: 207 | throw new Error('action(lyric) does not support source(' + source + ')') 208 | } 209 | } 210 | 211 | // 生成歌曲信息 212 | const musicSources = {} 213 | MUSIC_SOURCE.forEach(item => { 214 | musicSources[item] = { 215 | name: item, 216 | type: 'music', 217 | actions: (item == 'local') ? ['musicUrl', 'pic', 'lyric'] : ['musicUrl'], 218 | qualitys: (item == 'local') ? [] : MUSIC_QUALITY[item], 219 | } 220 | }) 221 | 222 | // 监听 LX Music 请求事件 223 | on(EVENT_NAMES.request, ({ action, source, info }) => { 224 | switch (action) { 225 | case 'musicUrl': 226 | if (env != 'mobile') { 227 | console.group(`Handle Action(musicUrl)`) 228 | console.log('source', source) 229 | console.log('quality', info.type) 230 | console.log('musicInfo', info.musicInfo) 231 | } else { 232 | console.log(`Handle Action(musicUrl)`) 233 | console.log('source', source) 234 | console.log('quality', info.type) 235 | console.log('musicInfo', info.musicInfo) 236 | } 237 | return handleGetMusicUrl(source, info.musicInfo, info.type) 238 | .then(data => Promise.resolve(data)) 239 | .catch(err => Promise.reject(err)) 240 | case 'pic': 241 | return handleGetMusicPic(source, info.musicInfo) 242 | .then(data => Promise.resolve(data)) 243 | .catch(err => Promise.reject(err)) 244 | case 'lyric': 245 | return handleGetMusicLyric(source, info.musicInfo) 246 | .then(data => Promise.resolve(data)) 247 | .catch(err => Promise.reject(err)) 248 | default: 249 | console.error(`action(${action}) not support`) 250 | return Promise.reject('action not support') 251 | } 252 | }) 253 | 254 | // 向 LX Music 发送初始化成功事件 255 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) 256 | -------------------------------------------------------------------------------- /长青SVIP音源v1.0.0(支持无损).js: -------------------------------------------------------------------------------- 1 | /** 2 | * @name 长青SVIP音源 3 | * @description 音源更新,关注微信公众号: 科技长青 4 | * @version 1.0.0 5 | * @author SVIP 6 | * @mail 微信公众号: 科技长青 7 | * @homepage 微信公众号: 科技长青 8 | */ 9 | var _0xodK='jsjiami.com.v7';const _0x44694e=_0x5ddf;function _0x5ddf(_0xe917fe,_0x118e88){const _0x2a84aa=_0x2a84();return _0x5ddf=function(_0x5ddf84,_0x2d4572){_0x5ddf84=_0x5ddf84-0xaf;let _0x4720b8=_0x2a84aa[_0x5ddf84];if(_0x5ddf['ShnuTk']===undefined){var _0x514a2b=function(_0x45ef9c){const _0x16e7fb='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3cc23d='',_0x146b73='';for(let _0x35b902=0x0,_0x2adb28,_0x2bb703,_0x58236b=0x0;_0x2bb703=_0x45ef9c['charAt'](_0x58236b++);~_0x2bb703&&(_0x2adb28=_0x35b902%0x4?_0x2adb28*0x40+_0x2bb703:_0x2bb703,_0x35b902++%0x4)?_0x3cc23d+=String['fromCharCode'](0xff&_0x2adb28>>(-0x2*_0x35b902&0x6)):0x0){_0x2bb703=_0x16e7fb['indexOf'](_0x2bb703);}for(let _0x505159=0x0,_0x1eea55=_0x3cc23d['length'];_0x505159<_0x1eea55;_0x505159++){_0x146b73+='%'+('00'+_0x3cc23d['charCodeAt'](_0x505159)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x146b73);};const _0x1f7180=function(_0xa2410b,_0x1fda72){let _0x15acdd=[],_0x29d46f=0x0,_0x5e7bde,_0xe93f47='';_0xa2410b=_0x514a2b(_0xa2410b);let _0x43fe4a;for(_0x43fe4a=0x0;_0x43fe4a<0x100;_0x43fe4a++){_0x15acdd[_0x43fe4a]=_0x43fe4a;}for(_0x43fe4a=0x0;_0x43fe4a<0x100;_0x43fe4a++){_0x29d46f=(_0x29d46f+_0x15acdd[_0x43fe4a]+_0x1fda72['charCodeAt'](_0x43fe4a%_0x1fda72['length']))%0x100,_0x5e7bde=_0x15acdd[_0x43fe4a],_0x15acdd[_0x43fe4a]=_0x15acdd[_0x29d46f],_0x15acdd[_0x29d46f]=_0x5e7bde;}_0x43fe4a=0x0,_0x29d46f=0x0;for(let _0x5bffe9=0x0;_0x5bffe9<_0xa2410b['length'];_0x5bffe9++){_0x43fe4a=(_0x43fe4a+0x1)%0x100,_0x29d46f=(_0x29d46f+_0x15acdd[_0x43fe4a])%0x100,_0x5e7bde=_0x15acdd[_0x43fe4a],_0x15acdd[_0x43fe4a]=_0x15acdd[_0x29d46f],_0x15acdd[_0x29d46f]=_0x5e7bde,_0xe93f47+=String['fromCharCode'](_0xa2410b['charCodeAt'](_0x5bffe9)^_0x15acdd[(_0x15acdd[_0x43fe4a]+_0x15acdd[_0x29d46f])%0x100]);}return _0xe93f47;};_0x5ddf['XnbNJn']=_0x1f7180,_0xe917fe=arguments,_0x5ddf['ShnuTk']=!![];}const _0x102c94=_0x2a84aa[0x0],_0x2ed4c3=_0x5ddf84+_0x102c94,_0x5488a6=_0xe917fe[_0x2ed4c3];return!_0x5488a6?(_0x5ddf['RvtFvK']===undefined&&(_0x5ddf['RvtFvK']=!![]),_0x4720b8=_0x5ddf['XnbNJn'](_0x4720b8,_0x2d4572),_0xe917fe[_0x2ed4c3]=_0x4720b8):_0x4720b8=_0x5488a6,_0x4720b8;},_0x5ddf(_0xe917fe,_0x118e88);}(function(_0x492844,_0x5ea3a8,_0x38905e,_0x58c917,_0x269521,_0x4ec169,_0x175de7){return _0x492844=_0x492844>>0x8,_0x4ec169='hs',_0x175de7='hs',function(_0x162f9c,_0x3797eb,_0x1b81e2,_0x2ead87,_0xca7244){const _0xd3ee95=_0x5ddf;_0x2ead87='tfi',_0x4ec169=_0x2ead87+_0x4ec169,_0xca7244='up',_0x175de7+=_0xca7244,_0x4ec169=_0x1b81e2(_0x4ec169),_0x175de7=_0x1b81e2(_0x175de7),_0x1b81e2=0x0;const _0x4fbed4=_0x162f9c();while(!![]&&--_0x58c917+_0x3797eb){try{_0x2ead87=-parseInt(_0xd3ee95(0xd4,'jR(c'))/0x1+-parseInt(_0xd3ee95(0xb2,'jhAw'))/0x2*(parseInt(_0xd3ee95(0xe0,'Aao8'))/0x3)+parseInt(_0xd3ee95(0xb5,'YUo6'))/0x4*(parseInt(_0xd3ee95(0xe4,'qWZ^'))/0x5)+parseInt(_0xd3ee95(0xd0,'qWZ^'))/0x6*(-parseInt(_0xd3ee95(0x105,'lJ[('))/0x7)+parseInt(_0xd3ee95(0x139,'3E]('))/0x8+-parseInt(_0xd3ee95(0xb6,'cd87'))/0x9*(parseInt(_0xd3ee95(0xdd,'o]!K'))/0xa)+parseInt(_0xd3ee95(0x124,'eVeY'))/0xb;}catch(_0x79de4e){_0x2ead87=_0x1b81e2;}finally{_0xca7244=_0x4fbed4[_0x4ec169]();if(_0x492844<=_0x58c917)_0x1b81e2?_0x269521?_0x2ead87=_0xca7244:_0x269521=_0xca7244:_0x1b81e2=_0xca7244;else{if(_0x1b81e2==_0x269521['replace'](/[XDOLAFfkUVQJqxPgEdYBp=]/g,'')){if(_0x2ead87===_0x3797eb){_0x4fbed4['un'+_0x4ec169](_0xca7244);break;}_0x4fbed4[_0x175de7](_0xca7244);}}}}}(_0x38905e,_0x5ea3a8,function(_0x4559c3,_0x24d293,_0x2cc589,_0x31fa04,_0x18ea88,_0x24a926,_0x3d25f1){return _0x24d293='\x73\x70\x6c\x69\x74',_0x4559c3=arguments[0x0],_0x4559c3=_0x4559c3[_0x24d293](''),_0x2cc589='\x72\x65\x76\x65\x72\x73\x65',_0x4559c3=_0x4559c3[_0x2cc589]('\x76'),_0x31fa04='\x6a\x6f\x69\x6e',(0x1bf832,_0x4559c3[_0x31fa04](''));});}(0xc800,0xd4100,_0x2a84,0xca),_0x2a84)&&(_0xodK=_0x44694e(0x134,'zFJH'));const {EVENT_NAMES,request,on,send}=globalThis['lx'],CURRENT_VERSION=_0x44694e(0xe5,'T7GP'),VERSION_CHECK_URL=_0x44694e(0x10c,'vSS6'),qualitys={'kg':{'128k':_0x44694e(0xdb,'0f*z'),'320k':'exhigh','flac':_0x44694e(0xd7,'jIAK')},'tx':{'128k':_0x44694e(0xc8,'L^gg'),'320k':'exhigh','flac':_0x44694e(0x100,'mjW9')},'wy':{'128k':_0x44694e(0x121,'YoQq'),'320k':_0x44694e(0x132,'qWZ^'),'flac':'lossless'},'kw':{'128k':_0x44694e(0xe9,'0*W6'),'320k':_0x44694e(0x118,'LkFc'),'flac':_0x44694e(0x117,'LkFc')},'mg':{'128k':_0x44694e(0x11f,'IUts'),'320k':_0x44694e(0xb8,'0*W6'),'flac':_0x44694e(0xee,'L^gg')}},apis={'kg':{'musicUrl'(_0x21abba,_0x5048a6){const _0x190a15=_0x44694e,_0x46030f={'cTKDZ':function(_0x1be26e,_0x1992aa){return _0x1be26e(_0x1992aa);}};let _0x4a8ffc='';const _0x489330=_0x21abba['hash'];return console[_0x190a15(0xd5,'cgtc')](_0x5048a6,_0x489330),_0x4a8ffc=_0x190a15(0x120,'UGB%')+_0x489330+'&level='+_0x5048a6,new Promise(_0x155149=>{_0x46030f['cTKDZ'](_0x155149,_0x4a8ffc);});}},'tx':{'musicUrl'(_0x537d1d,_0x25abbf){const _0x4e73a8=_0x44694e,_0x5d792c={'tiayN':function(_0x5d8c85,_0x127706){return _0x5d8c85(_0x127706);}};let _0x320e74='';const _0x4336f5=_0x537d1d['songmid'];return console[_0x4e73a8(0x15d,'%FOL')](_0x25abbf,_0x4336f5),_0x320e74=_0x4e73a8(0xbc,'vVbC')+_0x4336f5+_0x4e73a8(0xbb,'jIAK')+_0x25abbf,new Promise(_0x2f1d37=>{const _0x2f2a81=_0x4e73a8;_0x5d792c[_0x2f2a81(0xb7,'*5#B')](_0x2f1d37,_0x320e74);});}},'wy':{'musicUrl'(_0x1c17e0,_0x1c71e6){const _0x452fb3=_0x44694e,_0x3e9765={'VoGSj':function(_0x5bec60,_0x11ce7a){return _0x5bec60(_0x11ce7a);}};let _0x494aa6='';const _0x5c5a85=_0x1c17e0[_0x452fb3(0xcb,'jhAw')];return console[_0x452fb3(0xef,'*#3p')](_0x1c71e6,_0x5c5a85),_0x494aa6=_0x452fb3(0xec,'lJ[(')+_0x5c5a85+_0x452fb3(0x11a,'m(^!')+_0x1c71e6,new Promise(_0xae5fab=>{const _0x5c8dde=_0x452fb3;_0x3e9765[_0x5c8dde(0x114,'*5#B')](_0xae5fab,_0x494aa6);});}},'kw':{'musicUrl'(_0x44d5a5,_0x404bd6){const _0x2cbb25=_0x44694e;let _0x4e35d4='';const _0x27f61b=_0x44d5a5['songmid'];return console['log'](_0x404bd6,_0x27f61b),_0x4e35d4=_0x2cbb25(0xe7,'cgtc')+_0x27f61b+_0x2cbb25(0x13a,'dqq#')+_0x404bd6,new Promise(_0x205946=>{_0x205946(_0x4e35d4);});}},'mg':{'musicUrl'(_0x2ac81a,_0x20fe2a){const _0x4854e4=_0x44694e;let _0x254173='';const _0x3157b8=_0x2ac81a[_0x4854e4(0x125,'Puk6')];return console[_0x4854e4(0x142,'t&gr')](_0x20fe2a,_0x3157b8),_0x254173=_0x4854e4(0x14c,'Puk6')+_0x3157b8+_0x4854e4(0xd2,'L^gg')+_0x20fe2a,new Promise(_0x200a7b=>{_0x200a7b(_0x254173);});}}},compareVersions=(_0xca8739,_0x41f303)=>{const _0xf9ed89=_0x44694e,_0x586dc9={'PKgSf':function(_0x800d28,_0x750367){return _0x800d28<_0x750367;},'BluxT':function(_0x38a734,_0x21fd97){return _0x38a734>_0x21fd97;}},_0x3b4240=_0xca8739[_0xf9ed89(0xb1,'0*W6')]('.')['map'](Number),_0x36b60d=_0x41f303[_0xf9ed89(0x111,'mjW9')]('.')['map'](Number);for(let _0x4af66f=0x0;_0x586dc9[_0xf9ed89(0x11e,'cd87')](_0x4af66f,Math[_0xf9ed89(0xfd,'#7yX')](_0x3b4240[_0xf9ed89(0xca,'^I$9')],_0x36b60d['length']));_0x4af66f++){const _0xea397=_0x3b4240[_0x4af66f]||0x0,_0x16c660=_0x36b60d[_0x4af66f]||0x0;if(_0x586dc9[_0xf9ed89(0x107,'vVbC')](_0xea397,_0x16c660))return 0x1;if(_0xea397<_0x16c660)return-0x1;}return 0x0;},checkUpdate=async()=>{const _0x1046ea=_0x44694e,_0x47f6bc={'cWxMm':function(_0x1420ad,_0x49a02b){return _0x1420ad+_0x49a02b;},'TCpKn':function(_0x2c5c82,_0x17bc00,_0xc01cc9){return _0x2c5c82(_0x17bc00,_0xc01cc9);},'fXYYF':_0x1046ea(0x104,'eVeY'),'VeHIu':function(_0x2b2b39,_0x3e4f8c){return _0x2b2b39!==_0x3e4f8c;},'tLBgc':function(_0x3fdd87,_0xa2df52){return _0x3fdd87(_0xa2df52);},'vpYcz':function(_0x24f87a,_0x37265e){return _0x24f87a<_0x37265e;},'uWxUj':function(_0x19adb0,_0x328291){return _0x19adb0===_0x328291;},'ueAeL':'eqJIv','BFPdh':'aSyOT','mcjQr':function(_0xb952ad,_0x1992cd){return _0xb952ad(_0x1992cd);},'hstrg':_0x1046ea(0xea,'%FOL'),'cNrGf':'vFMcZ','XbOMj':function(_0x42a1bd,_0xa7adf5,_0x2a049c,_0x2bed41){return _0x42a1bd(_0xa7adf5,_0x2a049c,_0x2bed41);},'MFFCB':_0x1046ea(0x102,'qWZ^')};return new Promise((_0x5e1c36,_0x6e53c4)=>{const _0x2cfdc4=_0x1046ea,_0x3d23ea={'ockaB':function(_0x2cc791,_0x5c2ea7){const _0x4cc59c=_0x5ddf;return _0x47f6bc[_0x4cc59c(0x137,'wmL3')](_0x2cc791,_0x5c2ea7);},'PXDrt':function(_0x21c43f,_0x3ece0b){return _0x21c43f+_0x3ece0b;},'AtnuD':_0x2cfdc4(0xd9,'cgtc'),'uwgzC':function(_0x1fc6ba,_0x1697cd,_0x5c41ce){return _0x47f6bc['TCpKn'](_0x1fc6ba,_0x1697cd,_0x5c41ce);},'jsIma':_0x47f6bc[_0x2cfdc4(0xb3,'YUo6')],'frxxm':function(_0x1ab564,_0x21fbd5){const _0xad45f9=_0x2cfdc4;return _0x47f6bc[_0xad45f9(0x127,'$H)^')](_0x1ab564,_0x21fbd5);},'dCAFQ':function(_0x49d4f7,_0x39b4ee){const _0x3095c7=_0x2cfdc4;return _0x47f6bc[_0x3095c7(0xb9,'3E](')](_0x49d4f7,_0x39b4ee);},'AJmmG':function(_0x159f6a,_0x3c40f3){const _0xb3b160=_0x2cfdc4;return _0x47f6bc[_0xb3b160(0xe3,'04MD')](_0x159f6a,_0x3c40f3);},'CfrYE':function(_0x192f4b,_0xa6ed40,_0x4da8bb){return _0x192f4b(_0xa6ed40,_0x4da8bb);},'GgqhI':function(_0x205cb1,_0x36f000){const _0x4c6541=_0x2cfdc4;return _0x47f6bc[_0x4c6541(0x112,'IUts')](_0x205cb1,_0x36f000);},'CQXDi':_0x47f6bc['ueAeL'],'FmmTM':_0x47f6bc[_0x2cfdc4(0xcd,'lJ[(')],'KDLOB':function(_0x398e26,_0x264918){const _0xae53a2=_0x2cfdc4;return _0x47f6bc[_0xae53a2(0xc4,'zFJH')](_0x398e26,_0x264918);},'lVOkM':function(_0x126f4f,_0x3ec5bc){const _0x3677a8=_0x2cfdc4;return _0x47f6bc[_0x3677a8(0xd3,'0)b8')](_0x126f4f,_0x3ec5bc);},'AZlKn':_0x47f6bc['hstrg'],'Ufbxc':_0x47f6bc['cNrGf'],'xEHQY':_0x2cfdc4(0xc6,'jhAw'),'tuKqQ':function(_0x1b060d,_0x59f444){const _0x39011c=_0x2cfdc4;return _0x47f6bc[_0x39011c(0x133,'eVeY')](_0x1b060d,_0x59f444);}};_0x47f6bc[_0x2cfdc4(0x12c,'m(^!')](request,VERSION_CHECK_URL,{'method':_0x47f6bc['MFFCB'],'timeout':0xbb8},(_0x175933,_0x463b87)=>{const _0x441750=_0x2cfdc4;if(_0x175933||_0x3d23ea['frxxm'](_0x463b87[_0x441750(0xf4,'cd87')],0xc8)){console[_0x441750(0x156,'jR(c')](_0x441750(0x10e,'jIAK'),_0x175933||_0x463b87[_0x441750(0x119,'t&gr')]),_0x3d23ea[_0x441750(0x146,'0)b8')](_0x5e1c36,null);return;}try{const _0x4a8189=_0x463b87[_0x441750(0x11d,'m(^!')];_0x3d23ea['AJmmG'](_0x3d23ea[_0x441750(0xf8,'*#3p')](compareVersions,CURRENT_VERSION,_0x4a8189['version']),0x0)?_0x3d23ea[_0x441750(0xcf,'^I$9')](_0x3d23ea[_0x441750(0x130,'vVbC')],_0x3d23ea[_0x441750(0x12f,'(C#y')])?_0x4cd499(_0x8b8de1):_0x3d23ea[_0x441750(0x153,'Puk6')](_0x5e1c36,{'version':_0x4a8189[_0x441750(0xc9,'UYPQ')],'updateUrl':_0x4a8189['updateUrl'],'description':_0x4a8189[_0x441750(0xfa,'!Y&V')]||''}):_0x5e1c36(null);}catch(_0x2a0972){if(_0x3d23ea[_0x441750(0x116,'eVeY')](_0x3d23ea[_0x441750(0x110,'(C#y')],_0x3d23ea[_0x441750(0x13e,'SRMB')])){const _0x173241=_0x441750(0x11b,'T7GP')+_0x5edfa3['version']+'\x0a'+(_0x2d196a[_0x441750(0x108,'eVeY')]?_0x3d23ea['ockaB'](_0x3d23ea[_0x441750(0x13f,'3E](')](_0x3d23ea[_0x441750(0xe2,'LkFc')],_0x5ddfcf['description']),'\x0a'):'')+'请更新后使用';_0x3d23ea[_0x441750(0x123,'rOLZ')](_0x2e8c8e,_0x3f15b7[_0x441750(0xf9,'ovCd')],{'log':_0x173241,'updateUrl':_0x2a78d3['updateUrl']}),_0x22ae00[_0x441750(0xd1,'lJ[(')](_0x3d23ea['jsIma'],_0x5ee3d8);return;}else console[_0x441750(0xd5,'cgtc')](_0x3d23ea[_0x441750(0xb0,'*5#B')],_0x2a0972),_0x3d23ea[_0x441750(0x14e,'vVbC')](_0x5e1c36,null);}});});};function _0x2a84(){const _0x43f882=(function(){return[_0xodK,'EgjVDPsdBFjpiOfamALi.QcxoXXqmBkA.YUvVJP7==','W6SceXGr','amoskmoena','W5JcTSkmrwNdJmk9BIOd','bSkIW58','bmkLDCkaW6ZcR0W','jCkqAGLH','W6LUWR0bDw3dPL/cThlcGSk3','umoAW7W','vCkgWQlcTSkvgCoWDa','cSk9EXzpW4NcQSo+','W4VdKCoBWQ0','5PUi5Psf5ysE5AYvxrm','WQv4W43cLW','iCk7WQ4TBx7dJSku','WRddT8kls0C','W7lcMqZdGhddMSouwmo+WOxcU8kz','W6VcLmk0WPbk','W5FcGmk4WQC','dmocW6xdQCogFmkXySoJWPldS8kQhG','s8om6z2O5lU8','WQ3dGHfWW5y','tLuWW5CY','W5dcTmkptrRcGmk8xtqWgCoK','pmofWOzTWPu','g8o+WR5JsW','vmobW6/dNbqjWPdcJCo/aSoHW5RcHM/cIsSLF8kcWOirW7JcOSoREmkbWQv/B8o9yYZcKhPLWQaGW4tcKWj7W6qsW70JWQroWReczLXqAmojDa','vSoIASoLW6K','W4RdT8kmsmoJDmkeW6C','C8k4WQOVW6K','vCku6zYI5lQp','aSk5W4ZcUeFdQH3cJ0pcQ0NdN8oomYbtj8kHfvf6F0zbfCk/uuKmEmoSW4GbEZGAW6ldPCktWRufm8oTzKygtqBdOmk8W50/rCoSWQW','imknDZzB','tSkMy8kfW6xcPGldGW','s8obzG','pSkGWQG','WOFdKEMEJos5Lq','WRtdPhGtBW','o8klW7hcNh0','WQRdPwOoEuVcNSo6xKy','W4W7WR9p','emkttrbh','feWoW6KZWO/cTmkRxmoAWQNcNZec','zmoiC8o+CW','WO3cK8kpWQFdKCoJCmkcWRddM0O','W7b7W4xcRgjwW4XyW6NdKmot','fXmUWPqT','WR3cMJNcSW','WQ51W5q','WRJdO8kYWPBdLaq','dmkXtbbB','yaJcSCk2Cavnha','WRxdVMW','WQBdGCoS','WPtcJmkm','5yYL546n5Ps+54Mw5P67oUMCI+ILJUABK+AxHaNOHldMNBtLSjpKU5BKV7VLIzRLPyxLJ7n3','wCo+WOhdVwhcIv7dQ1NcTG','umkWvSk8W5e','W7OUWRPsW4W'].concat((function(){return['WPbyW719W6v/E8k7tHTl','ovhdTCk2BXfjnIm','m8kOW5dcL2FdJCoFW7W','W7BdHeZcShG','W6CJicaBpmonWRnbW5jLW7VdVuLqp8kObSk+wX3cMSk1WQxdM0VdImkzW5DUWPdcJH3dNdPNW7FdH1arkwG6EmkBtCo1','eSo8omondq','5QkM5PY35PU85PEv5Ass6lAjW6m','W7fTW47cGMG','ECoRW5RdQLO','FXFcRSkSAa','k8kkW5VcQ24','WQPmW7VcVmkr','smoUy8oSWRi','WObvW6TW','WPHRW4f1W5O','WOddMqX2W74BW5BdGa','WONdJHDSW7uw','oSk9yCkkW6BcP1nkWQ4uBbTK','ESkBcSkXW4qzhW','5y+C542B5Psg54Il5P6jkKa','t8k8y8kFW6RcLGpdNa','pSkyc8k+','WONdMMWPAG','lCkPW4lcKgddUCoFW7q','tqTcWQ92WOBcQmkYvSoSWRVcPYuaFHtdS8kxsSknxc3cTxFdLmomW7iyWQTXDXhdKhzVzx3dTmoVydtdQZ8HiJ/dK8kdW5bLlCkbj3GyatCDW7ZcIa0pCeG0ksdcVSkEWQGLWOLhhSkwWPbDW5j3n8oYtmo/EW/cQIy','W7iJaCo4WRFdLr/cMa','FmkkW4vK','kxxdNGu1','W4ynWROUWQ8Hp8o/tJ1UyY9/','BSkYWQ/cNmoZt8oo','v8oc6z2O5lU8','WQVcNJZcPNS','W5ZdLCk/rmo+','5QcF5P675PM75PAb5yA/6zwgWQBMRzpLU6xLIilLPk/LJ5pdUa','AmkTWQxcMSoQq8o/WRhdMa','W4G/cSoUWQa','bmkvimkkW4S','uCoVrmosuG','WOhdGWXSW7e','FSoCW5VdTxK','W7StWPDUW7e','y8kEWRKpW4y','WOtdVmoqheNdNq','WPLEW6rpW6u','r1xdISkooaBcGYHcW6NcSKVdOXS','guv9W502WQ3dISoZ','W5ldToMCNUs5TG','lSoVWOvcxG','amk+W5lcOvxcVvVcJK3cSvFcMmoBzq','W6tdJtCJW43cHftcM8kGntb6vxi','W6BdGSobWOLlDSkS','BwWiW5u4','FgldPCkVnq','xmkMWPBcL8kp','W6tcISk7WRXS','WOxcPKTNWO8','rqi2W58','WQVdPCoYWRDC','jCkMzW','W6qCaHGA'].concat((function(){return['w8o5W5FdGMy','WR5LBdS','nmkeuXPA','WOFdI8kyWO7dIq','WOJcH8kcWQ/dGq','BSo3W7xdJuW','WONdOc1NW6S','W6ldH24','DCkPWRxcI8oThmkfW6ZdMuxdNHXbW5TSCmoiW5pdPSoxW7pcTxHYfmkynSoErhGfW7BcVHqknSk9kCo1w8oBomoae0yPWPnld8kytSk4fgeeEmoLW50','cXDzW58','W4W3WOrBW4K','p8k6WRWQALBdKSkwfW','WPJcRsBcJxC','5B205yUJ5BEZ5PQi5PY25Pst54M65P2ZwUATIow7IEwkGUwKSUwoHG','v8oPtSohWQS','vSkzWO3cTmoC','x0pdKCkspbJcNG','CmkZ6zYq5lI0','WRmXW6G','WRddV2ioAvW','WPLiW713W7rdECkJ','W6RcOZSr','mSofpConcCklw8ouw8oaW64','cmk7g8knW6G','xmoKW7hdQu0','AmkKWOq','WPddUwecFW','5y2E54+N5PEK54Iy5P2ekUMFOUIKNEAAHoAvKx3OH5dMN6lLSAhKUlBKVzBLI4hLPQlLJ5Oe','zSoeBmoUWOe','W4RdS8kbt8oZ','W6pdMmkIWPddUGXH','WOi8W6XjWQK','W79vW6dcH2i','W5vwWO1OWRPoWPpdGCkR','W6ZcPZWjF0NcQSomFq','ASoOrCogWPy','W5ZdU8kft8oGFq','WQhcSK1YWPG','ECoSymo7DCoMW4eF','qmk+BrngW4ddPa','W5a2WRTAW6VcO8oiWRfSaCkDCmkHW6BdNaJdOa/dSW/dPCo9f8oVWQ80WOdcUSkrjmokxCkrWO0ovhrGqbrRp8kJW7adF8osnb7cRfRdPCkQWQnbsmoHAZr9bMzr','6k6r5PQu5PEV5zoQ5lY355ES','W7iMWPtcNW','uCkcWOifW6a','WONcGGtcIG','W7NcMI/cPCk1','FH7cHmkpra','cSodW6xdR8ooE8k2kmo4WOhdGmkapSog','qexdISk2kW','W5ZdQ1dcJ3e','6ksY5PYD54Qt5P+o5l2q5Ocp5As86lw/Dq','WOmXW697WRK','uCk9CCkyW63cOGpdLa','WRFdOCkiseVcOmom','k8oqn8olcCkg','WQldOSk1WOxdNaLP','5PI15Ps05yw/5A6cgmoV','kmklW6JcRfW'];}()));}()));}());_0x2a84=function(){return _0x43f882;};return _0x2a84();};on(EVENT_NAMES[_0x44694e(0x154,'zFJH')],({source:_0x20d572,action:_0x4f1970,info:_0x230367})=>{const _0x49563d=_0x44694e;switch(_0x4f1970){case _0x49563d(0x135,'y34&'):console[_0x49563d(0x103,'ovCd')](apis[_0x20d572][_0x49563d(0xd6,'Aao8')](_0x230367['musicInfo'],qualitys[_0x20d572][_0x230367[_0x49563d(0xf5,'vVbC')]]),_0x20d572);return apis[_0x20d572][_0x49563d(0x10a,'IUts')](_0x230367[_0x49563d(0x14f,'0f*z')],qualitys[_0x20d572][_0x230367[_0x49563d(0xc0,'$H)^')]]);}}),checkUpdate()[_0x44694e(0x115,'eVeY')](_0x2346ba=>{const _0x578bfc=_0x44694e,_0x354405={'iXWHp':function(_0x1bbf4e,_0x5e4d01){return _0x1bbf4e+_0x5e4d01;},'QDEHl':_0x578bfc(0xcc,'UYPQ'),'wZvpd':function(_0x468384,_0x30cea8,_0x3f578d){return _0x468384(_0x30cea8,_0x3f578d);},'cMZdW':_0x578bfc(0x151,'*#3p'),'DQKbO':function(_0x5e6a8e,_0xce11fd,_0x1c8bf0){return _0x5e6a8e(_0xce11fd,_0x1c8bf0);},'ddnth':'kg音乐','eVRby':_0x578bfc(0x12e,'LkFc'),'kKVHr':'musicUrl','Ihjxs':_0x578bfc(0xfc,'h!]l'),'ryFJX':_0x578bfc(0xda,'#7yX'),'pdiid':_0x578bfc(0x155,'%FOL'),'UXACi':_0x578bfc(0xe1,'cgtc'),'dUGHy':'128k','TLtJI':_0x578bfc(0x126,'cgtc'),'RCYWK':'mg音乐'};if(_0x2346ba){const _0x4ff4f0='发现新版本\x20v'+_0x2346ba['version']+'\x0a'+(_0x2346ba['description']?_0x354405[_0x578bfc(0x113,'#7yX')](_0x354405[_0x578bfc(0x13c,'zFJH')]+_0x2346ba['description'],'\x0a'):'')+_0x578bfc(0xbd,'fHt2');_0x354405['wZvpd'](send,EVENT_NAMES[_0x578bfc(0x15a,'^I$9')],{'log':_0x4ff4f0,'updateUrl':_0x2346ba[_0x578bfc(0x12a,'Puk6')]}),console[_0x578bfc(0x101,'cd87')](_0x578bfc(0xaf,'vSS6'),_0x2346ba);return;}else console[_0x578bfc(0x14b,'h!]l')](_0x354405['cMZdW']),_0x354405['DQKbO'](send,EVENT_NAMES[_0x578bfc(0x157,'cd87')],{'openDevTools':![],'sources':{'kg':{'name':_0x354405[_0x578bfc(0xe8,')RRv')],'type':_0x354405[_0x578bfc(0x128,'0*W6')],'actions':[_0x354405[_0x578bfc(0x143,'vSS6')]],'qualitys':[_0x578bfc(0x140,'y34&'),_0x354405[_0x578bfc(0x15e,'cd87')],_0x354405[_0x578bfc(0xc1,'09lL')]]},'tx':{'name':_0x354405[_0x578bfc(0x148,'ovCd')],'type':'music','actions':[_0x354405['kKVHr']],'qualitys':['128k',_0x354405['Ihjxs'],_0x354405[_0x578bfc(0x106,'L^gg')]]},'wy':{'name':_0x354405['UXACi'],'type':_0x354405[_0x578bfc(0x14a,'LkFc')],'actions':[_0x354405[_0x578bfc(0xb4,'!Y&V')]],'qualitys':[_0x354405[_0x578bfc(0xce,'vSS6')],_0x354405[_0x578bfc(0x12b,'YoQq')],_0x354405['ryFJX']]},'kw':{'name':_0x354405[_0x578bfc(0x15b,'m(^!')],'type':_0x354405[_0x578bfc(0xf3,'IUts')],'actions':[_0x354405['kKVHr']],'qualitys':[_0x354405[_0x578bfc(0x13d,'Aao8')],_0x354405['Ihjxs'],_0x354405['ryFJX']]},'mg':{'name':_0x354405[_0x578bfc(0xc5,'h!]l')],'type':_0x354405[_0x578bfc(0x150,'$H)^')],'actions':[_0x354405[_0x578bfc(0x141,'dqq#')]],'qualitys':[_0x354405[_0x578bfc(0x15c,'(C#y')],_0x354405[_0x578bfc(0x152,'*5#B')],_0x354405[_0x578bfc(0xc2,'mjW9')]]}}});})['catch'](_0x5dfa39=>{const _0x358f5f=_0x44694e,_0x5ddf24={'pJejP':_0x358f5f(0x129,'jR(c'),'cHacR':function(_0x45a03f,_0x45911f,_0x2a45b9){return _0x45a03f(_0x45911f,_0x2a45b9);},'jcDux':_0x358f5f(0xf1,'LkFc'),'gUZkV':_0x358f5f(0xf2,'cd87'),'VFClx':_0x358f5f(0xbe,'#7yX'),'vAEud':_0x358f5f(0xd8,'ovCd'),'UIaap':_0x358f5f(0xdf,'SRMB'),'xlEhB':'tx音乐','esxMx':'wy音乐','EvpjP':_0x358f5f(0x136,'0*W6'),'qsqpe':_0x358f5f(0x11c,'L^gg'),'ZxmTE':_0x358f5f(0xeb,'Aao8')};console[_0x358f5f(0xf0,'0f*z')](_0x5ddf24[_0x358f5f(0xed,'0)b8')],_0x5dfa39),_0x5ddf24[_0x358f5f(0x144,'(C#y')](send,EVENT_NAMES[_0x358f5f(0xfe,'jhAw')],{'openDevTools':![],'sources':{'kg':{'name':_0x5ddf24[_0x358f5f(0xff,'jIAK')],'type':_0x5ddf24[_0x358f5f(0xc7,'YUo6')],'actions':[_0x358f5f(0xba,'hxF4')],'qualitys':[_0x5ddf24[_0x358f5f(0x147,'jhAw')],_0x5ddf24['vAEud'],_0x5ddf24['UIaap']]},'tx':{'name':_0x5ddf24[_0x358f5f(0x10b,'h!]l')],'type':_0x5ddf24[_0x358f5f(0x131,'%FOL')],'actions':['musicUrl'],'qualitys':[_0x358f5f(0x122,'wmL3'),_0x358f5f(0x14d,'04MD'),_0x5ddf24[_0x358f5f(0xbf,'%FOL')]]},'wy':{'name':_0x5ddf24[_0x358f5f(0x10f,'!Y&V')],'type':_0x5ddf24['gUZkV'],'actions':[_0x358f5f(0x158,'eVeY')],'qualitys':[_0x5ddf24[_0x358f5f(0x149,'(C#y')],_0x358f5f(0x159,'cd87'),_0x5ddf24[_0x358f5f(0x13b,'04MD')]]},'kw':{'name':_0x5ddf24['EvpjP'],'type':'music','actions':[_0x5ddf24[_0x358f5f(0xfb,'fHt2')]],'qualitys':[_0x358f5f(0x145,'vSS6'),_0x5ddf24[_0x358f5f(0x12d,'*#3p')],_0x5ddf24[_0x358f5f(0x10d,'^I$9')]]},'mg':{'name':_0x5ddf24[_0x358f5f(0xde,'SRMB')],'type':_0x5ddf24['gUZkV'],'actions':[_0x5ddf24[_0x358f5f(0xdc,'UYPQ')]],'qualitys':[_0x5ddf24[_0x358f5f(0xe6,'wmL3')],_0x5ddf24[_0x358f5f(0xf6,'jIAK')],'flac']}}});});var version_ = 'jsjiami.com.v7'; -------------------------------------------------------------------------------- /聚合API接口.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name 聚合API接口 (by lerd) 3 | * @description 理论可听全平台无损 4 | * @version v2.0.0 5 | * @author lerd 6 | */ 7 | var _0xod2 = 'jsjiami.com.v7'; 8 | const _0x2375d4 = _0x332b; 9 | 10 | function _0x332b(_0x1a7e99, _0x56212e) { 11 | const _0x3e5405 = _0x3e54(); 12 | return _0x332b = function(_0x332b4b, _0x5de7c7) { 13 | _0x332b4b = _0x332b4b - 0x99; 14 | let _0x8b95dc = _0x3e5405[_0x332b4b]; 15 | if (_0x332b['tRowSc'] === undefined) { 16 | var _0x16b257 = function(_0xacfc57) { 17 | const _0x48a39a = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/='; 18 | let _0x141f02 = '', 19 | _0x43ba4a = ''; 20 | for (let _0x386ddc = 0x0, _0x1e3707, _0x502bc7, _0x307a78 = 0x0; _0x502bc7 = _0xacfc57['charAt'](_0x307a78++); ~_0x502bc7 && (_0x1e3707 = _0x386ddc % 0x4 ? _0x1e3707 * 0x40 + _0x502bc7 : _0x502bc7, _0x386ddc++ % 0x4) ? _0x141f02 += String['fromCharCode'](0xff & _0x1e3707 >> (-0x2 * _0x386ddc & 0x6)) : 0x0) { 21 | _0x502bc7 = _0x48a39a['indexOf'](_0x502bc7); 22 | } 23 | for (let _0x29b5ae = 0x0, _0x3431e8 = _0x141f02['length']; _0x29b5ae < _0x3431e8; _0x29b5ae++) { 24 | _0x43ba4a += '%' + ('00' + _0x141f02['charCodeAt'](_0x29b5ae)['toString'](0x10))['slice'](-0x2); 25 | } 26 | return decodeURIComponent(_0x43ba4a); 27 | }; 28 | const _0x2cb0ad = function(_0x3d4aa5, _0x1614ac) { 29 | let _0x53c089 = [], 30 | _0xf29bb0 = 0x0, 31 | _0x4c7be5, _0x267bb8 = ''; 32 | _0x3d4aa5 = _0x16b257(_0x3d4aa5); 33 | let _0xee68a9; 34 | for (_0xee68a9 = 0x0; _0xee68a9 < 0x100; _0xee68a9++) { 35 | _0x53c089[_0xee68a9] = _0xee68a9; 36 | } 37 | for (_0xee68a9 = 0x0; _0xee68a9 < 0x100; _0xee68a9++) { 38 | _0xf29bb0 = (_0xf29bb0 + _0x53c089[_0xee68a9] + _0x1614ac['charCodeAt'](_0xee68a9 % _0x1614ac['length'])) % 0x100, _0x4c7be5 = _0x53c089[_0xee68a9], _0x53c089[_0xee68a9] = _0x53c089[_0xf29bb0], _0x53c089[_0xf29bb0] = _0x4c7be5; 39 | } 40 | _0xee68a9 = 0x0, _0xf29bb0 = 0x0; 41 | for (let _0x10de97 = 0x0; _0x10de97 < _0x3d4aa5['length']; _0x10de97++) { 42 | _0xee68a9 = (_0xee68a9 + 0x1) % 0x100, _0xf29bb0 = (_0xf29bb0 + _0x53c089[_0xee68a9]) % 0x100, _0x4c7be5 = _0x53c089[_0xee68a9], _0x53c089[_0xee68a9] = _0x53c089[_0xf29bb0], _0x53c089[_0xf29bb0] = _0x4c7be5, _0x267bb8 += String['fromCharCode'](_0x3d4aa5['charCodeAt'](_0x10de97) ^ _0x53c089[(_0x53c089[_0xee68a9] + _0x53c089[_0xf29bb0]) % 0x100]); 43 | } 44 | return _0x267bb8; 45 | }; 46 | _0x332b['FKfPGk'] = _0x2cb0ad, _0x1a7e99 = arguments, _0x332b['tRowSc'] = !![]; 47 | } 48 | const _0x2ee30b = _0x3e5405[0x0], 49 | _0x4c3704 = _0x332b4b + _0x2ee30b, 50 | _0x5c20ff = _0x1a7e99[_0x4c3704]; 51 | return !_0x5c20ff ? (_0x332b['tkWaPe'] === undefined && (_0x332b['tkWaPe'] = !![]), _0x8b95dc = _0x332b['FKfPGk'](_0x8b95dc, _0x5de7c7), _0x1a7e99[_0x4c3704] = _0x8b95dc) : _0x8b95dc = _0x5c20ff, _0x8b95dc; 52 | }, _0x332b(_0x1a7e99, _0x56212e); 53 | }(function(_0x31e252, _0x31ec74, _0x501ac3, _0x475b9f, _0x230a89, _0x41e081, _0x32f175) { 54 | return _0x31e252 = _0x31e252 >> 0x6, _0x41e081 = 'hs', _0x32f175 = 'hs', 55 | function(_0x599cb1, _0x3eee44, _0x2c12af, _0x5a4750, _0x27ab7a) { 56 | const _0x34367f = _0x332b; 57 | _0x5a4750 = 'tfi', _0x41e081 = _0x5a4750 + _0x41e081, _0x27ab7a = 'up', _0x32f175 += _0x27ab7a, _0x41e081 = _0x2c12af(_0x41e081), _0x32f175 = _0x2c12af(_0x32f175), _0x2c12af = 0x0; 58 | const _0x554200 = _0x599cb1(); 59 | while (!![] && --_0x475b9f + _0x3eee44) { 60 | try { 61 | _0x5a4750 = -parseInt(_0x34367f(0xc3, 'OjpG')) / 0x1 * (-parseInt(_0x34367f(0xf1, 'AXG[')) / 0x2) + -parseInt(_0x34367f(0xac, 'OjpG')) / 0x3 + -parseInt(_0x34367f(0xa9, 'rxWY')) / 0x4 + -parseInt(_0x34367f(0xdb, 'DZ)e')) / 0x5 + parseInt(_0x34367f(0x100, 'Hko$')) / 0x6 + -parseInt(_0x34367f(0xbd, '8ENj')) / 0x7 * (parseInt(_0x34367f(0xd4, '#2e$')) / 0x8) + -parseInt(_0x34367f(0x106, '#2e$')) / 0x9; 62 | } catch (_0xf6ef14) { 63 | _0x5a4750 = _0x2c12af; 64 | } finally { 65 | _0x27ab7a = _0x554200[_0x41e081](); 66 | if (_0x31e252 <= _0x475b9f) _0x2c12af ? _0x230a89 ? _0x5a4750 = _0x27ab7a : _0x230a89 = _0x27ab7a : _0x2c12af = _0x27ab7a; 67 | else { 68 | if (_0x2c12af == _0x230a89['replace'](/[SGphFLxfDJEQuPdRAqNBT=]/g, '')) { 69 | if (_0x5a4750 === _0x3eee44) { 70 | _0x554200['un' + _0x41e081](_0x27ab7a); 71 | break; 72 | } 73 | _0x554200[_0x32f175](_0x27ab7a); 74 | } 75 | } 76 | } 77 | } 78 | }(_0x501ac3, _0x31ec74, function(_0x1f8387, _0x436be4, _0x39ff61, _0x29c458, _0x3cee82, _0x5cce1a, _0x2bed0e) { 79 | return _0x436be4 = 'split', _0x1f8387 = arguments[0x0], _0x1f8387 = _0x1f8387[_0x436be4](''), _0x39ff61 = 'reverse', _0x1f8387 = _0x1f8387[_0x39ff61]('v'), _0x29c458 = 'join', (0x17e782, _0x1f8387[_0x29c458]('')); 80 | }); 81 | }(0x2f40, 0xac1e3, _0x3e54, 0xbf), _0x3e54) && (_0xod2 = 0x1ba1); 82 | const DEV_ENABLE = ![], 83 | MUSIC_QUALITY = { 84 | 'tx': ['128k', '320k', _0x2375d4(0xe8, 'EfBr'), _0x2375d4(0xf4, 'OjpG')], 85 | 'wy': [_0x2375d4(0x103, 'AXG['), _0x2375d4(0xfd, '5xm9'), 'flac', _0x2375d4(0xdf, 'rwK1')], 86 | 'kg': [_0x2375d4(0xde, 'Hko$'), _0x2375d4(0xcd, 'nQ!]'), _0x2375d4(0xfa, '1L(9'), _0x2375d4(0xe9, 'B)(O')], 87 | 'kw': ['128k', _0x2375d4(0xc8, ')av0'), _0x2375d4(0xba, 'V6Gi')], 88 | 'mg': ['320k', _0x2375d4(0xa8, '7CUv')] 89 | }, 90 | MUSIC_SOURCE = Object[_0x2375d4(0xef, '9Sh@')](MUSIC_QUALITY), 91 | { 92 | EVENT_NAMES, request, on, send, utils, env, version, currentScriptInfo 93 | } = globalThis['lx'], 94 | httpFetch = (_0x569402, _0x3d5730 = { 95 | 'method': _0x2375d4(0x99, 'PSAy') 96 | }) => { 97 | const _0x32bbdb = { 98 | 'lwGTR': function(_0x6dc667, _0x2ab009) { 99 | return _0x6dc667(_0x2ab009); 100 | }, 101 | 'txHMW': function(_0x350d3d, _0x348ae7, _0x3c83ae, _0x1b72b2) { 102 | return _0x350d3d(_0x348ae7, _0x3c83ae, _0x1b72b2); 103 | } 104 | }; 105 | return new Promise((_0x173a9f, _0x29fcdb) => { 106 | const _0x25a897 = _0x332b, 107 | _0x1c6f47 = { 108 | 'HmTiP': function(_0x56a99c, _0x156ffe) { 109 | return _0x32bbdb['lwGTR'](_0x56a99c, _0x156ffe); 110 | } 111 | }; 112 | _0x32bbdb[_0x25a897(0xcb, 'ccNn')](request, _0x569402, _0x3d5730, (_0xa129ff, _0x5c45fb) => { 113 | const _0x4bec35 = _0x25a897; 114 | if (_0xa129ff) return _0x29fcdb(_0xa129ff); 115 | _0x1c6f47[_0x4bec35(0xf3, '#2e$')](_0x173a9f, _0x5c45fb); 116 | }); 117 | }); 118 | }, 119 | handleGetMusicUrl = async(_0x42f452, _0x4d19d6, _0x51b3b3) => { 120 | const _0x1a9c83 = _0x2375d4, 121 | _0x162c2c = { 122 | 'OtUrB': function(_0x13b862, _0x53c1c3) { 123 | return _0x13b862(_0x53c1c3); 124 | }, 125 | 'WhsYP': function(_0x5d3fee, _0x11e5c4) { 126 | return _0x5d3fee != _0x11e5c4; 127 | }, 128 | 'PAYtV': function(_0x378b3a, _0x4a6117) { 129 | return _0x378b3a(_0x4a6117); 130 | }, 131 | 'hhdcH': 'get url error', 132 | 'ICmDG': function(_0x303747, _0x1d12a1) { 133 | return _0x303747 == _0x1d12a1; 134 | }, 135 | 'JbwVc': 'standard', 136 | 'ZLHiQ': _0x1a9c83(0xb1, '$4zZ'), 137 | 'EKcoC': _0x1a9c83(0xaf, 'rwK1'), 138 | 'YjOHQ': _0x1a9c83(0xe6, 'Hko$'), 139 | 'mpHRK': function(_0x31a6e3, _0x39a520, _0x24aa1a) { 140 | return _0x31a6e3(_0x39a520, _0x24aa1a); 141 | }, 142 | 'czkjX': function(_0x229847, _0x3ed4b5) { 143 | return _0x229847(_0x3ed4b5); 144 | }, 145 | 'dDScf': _0x1a9c83(0xf0, 'bUaV'), 146 | 'ZLYhE': function(_0x2db930, _0x1c4ab3) { 147 | return _0x2db930(_0x1c4ab3); 148 | }, 149 | 'PqjDo': _0x1a9c83(0x102, 'nI^u') 150 | }; 151 | if (_0x42f452 == 'tx') { 152 | const _0x1bb250 = { 153 | '128k': '7', 154 | '320k': '9', 155 | 'flac': '11', 156 | 'flac24bit': '14' 157 | }, 158 | _0x159557 = _0x1a9c83(0xd8, 'OjpG') + _0x4d19d6[_0x1a9c83(0xb6, 'rwK1')] + _0x1a9c83(0xa3, '$4zZ') + _0x1bb250[_0x51b3b3], 159 | _0x5c45cb = await httpFetch(_0x159557, { 160 | 'method': 'GET' 161 | }), 162 | { 163 | body: _0x460b4d 164 | } = _0x5c45cb; 165 | if (!_0x460b4d || _0x162c2c[_0x1a9c83(0xf5, 'AXG[')](isNaN, Number(_0x460b4d[_0x1a9c83(0xfc, 't)R1')])) || _0x162c2c[_0x1a9c83(0xa6, 'B)(O')](_0x162c2c[_0x1a9c83(0xe4, '92RF')](Number, _0x460b4d[_0x1a9c83(0xb8, 'Hko$')]), 0x0)) throw new Error(_0x162c2c['hhdcH']); 166 | return _0x460b4d[_0x1a9c83(0xb5, 'wIiY')][_0x1a9c83(0xe2, '#TxF')]; 167 | } else { 168 | if (_0x162c2c[_0x1a9c83(0xfb, '8SsA')](_0x42f452, 'wy')) { 169 | const _0x306da6 = { 170 | '128k': _0x162c2c['JbwVc'], 171 | '320k': _0x162c2c[_0x1a9c83(0xda, 'nI^u')], 172 | 'flac': _0x162c2c[_0x1a9c83(0xe1, '7rx!')], 173 | 'flac24bit': _0x162c2c[_0x1a9c83(0xb4, '1L(9')] 174 | }, 175 | _0xdeb2a9 = _0x1a9c83(0xff, 'nQ!]') + _0x4d19d6['songmid'] + _0x1a9c83(0xd0, 'rwK1') + _0x306da6[_0x51b3b3], 176 | _0x7a48cc = await _0x162c2c['mpHRK'](httpFetch, _0xdeb2a9, { 177 | 'method': _0x1a9c83(0x105, 'JrFm') 178 | }), 179 | { 180 | body: _0x3ce470 181 | } = _0x7a48cc; 182 | if (!_0x3ce470 || _0x162c2c[_0x1a9c83(0xd9, 'ccNn')](isNaN, Number(_0x3ce470[_0x1a9c83(0x9c, 'TtRP')])) || Number(_0x3ce470[_0x1a9c83(0xe0, '9Sh@')]) != 0xc8) throw new Error(_0x1a9c83(0xed, '8SsA')); 183 | return _0x3ce470[_0x1a9c83(0xd6, 'EfBr')][_0x1a9c83(0xcc, '$0oq')]; 184 | } else { 185 | if (_0x42f452 == 'kg') { 186 | const _0x3854f7 = { 187 | '128k': _0x162c2c['dDScf'], 188 | '320k': _0x1a9c83(0xa5, 'Ra%p'), 189 | 'flac': _0x1a9c83(0xa8, '7CUv'), 190 | 'flac24bit': _0x1a9c83(0xbb, 'PSAy') 191 | }, 192 | _0x351ef1 = _0x1a9c83(0x9f, '1&KV') + _0x4d19d6[_0x1a9c83(0x104, 'YS]1')] + _0x1a9c83(0xf9, 'AXG[') + _0x3854f7[_0x51b3b3], 193 | _0x25a238 = await httpFetch(_0x351ef1, { 194 | 'method': 'GET' 195 | }), 196 | { 197 | body: _0x565f80 198 | } = _0x25a238; 199 | if (!_0x565f80 || _0x162c2c[_0x1a9c83(0xdd, ')av0')](isNaN, _0x162c2c[_0x1a9c83(0xae, '7CUv')](Number, _0x565f80[_0x1a9c83(0xc1, '8SsA')])) || _0x162c2c[_0x1a9c83(0xc5, '9Sh@')](Number, _0x565f80[_0x1a9c83(0xdc, '$0oq')]) != 0xc8) throw new Error(_0x1a9c83(0xa0, 't)R1')); 200 | return _0x565f80[_0x1a9c83(0xf6, 'T@V4')]; 201 | } else { 202 | if (_0x162c2c[_0x1a9c83(0xe3, '8ENj')](_0x42f452, 'kw')) { 203 | const _0x2467b5 = { 204 | '128k': _0x1a9c83(0x9a, 'TtRP'), 205 | '320k': _0x162c2c[_0x1a9c83(0xf2, '92RF')], 206 | 'flac': _0x162c2c['EKcoC'] 207 | }, 208 | _0x220d53 = _0x1a9c83(0xb9, '8SsA') + _0x4d19d6[_0x1a9c83(0xa4, '9Sh@')] + _0x1a9c83(0xee, 'JrFm') + _0x2467b5[_0x51b3b3], 209 | _0x3b7912 = await httpFetch(_0x220d53, { 210 | 'method': _0x162c2c[_0x1a9c83(0xcf, '1&KV')] 211 | }), 212 | { 213 | body: _0x5ab28e 214 | } = _0x3b7912; 215 | if (!_0x5ab28e || _0x162c2c[_0x1a9c83(0xea, '92RF')](isNaN, _0x162c2c[_0x1a9c83(0xad, '5xm9')](Number, _0x5ab28e[_0x1a9c83(0xe7, 'fxV0')])) || Number(_0x5ab28e[_0x1a9c83(0xb0, 's0VR')]) != 0xc8) throw new Error(_0x162c2c[_0x1a9c83(0xeb, 'nI^u')]); 216 | return _0x5ab28e[_0x1a9c83(0xbc, 'Ra%p')][_0x1a9c83(0xd2, 'CcZq')]; 217 | } else { 218 | if (_0x42f452 == 'mg') { 219 | const _0x5a1b31 = { 220 | '320k': '2', 221 | 'flac': '1' 222 | }, 223 | _0x34fbde = 'https://www.hhlqilongzhu.cn/api/dg_mgmusic_24bit.php?msg=' + msg + _0x1a9c83(0xa2, 'Qcnx') + _0x5a1b31[_0x51b3b3], 224 | _0x326054 = await httpFetch(_0x34fbde, { 225 | 'method': 'GET' 226 | }), 227 | { 228 | body: _0x3571e6 229 | } = _0x326054; 230 | if (!_0x3571e6 || isNaN(Number(_0x3571e6['code'])) || Number(_0x3571e6[_0x1a9c83(0xd7, 'PSAy')]) != 0xc8) throw new Error(_0x1a9c83(0xf7, 'EfBr')); 231 | return _0x3571e6['music_url']; 232 | } 233 | } 234 | } 235 | } 236 | } 237 | }, 238 | musicSources = {}; 239 | MUSIC_SOURCE['forEach'](_0x238e3a => { 240 | const _0x4707e2 = _0x2375d4, 241 | _0x45a375 = { 242 | 'rpXjg': _0x4707e2(0xc6, 'nQ!]'), 243 | 'RalDw': _0x4707e2(0xb3, 'AXG['), 244 | 'CwdUH': _0x4707e2(0xd5, '$4zZ'), 245 | 'eszRO': function(_0xa1e746, _0x5a53c4) { 246 | return _0xa1e746 == _0x5a53c4; 247 | } 248 | }; 249 | musicSources[_0x238e3a] = { 250 | 'name': _0x238e3a, 251 | 'type': _0x45a375[_0x4707e2(0xd1, 'PSAy')], 252 | 'actions': _0x238e3a == _0x45a375[_0x4707e2(0x9b, 't)R1')] ? [] : [_0x45a375[_0x4707e2(0xc9, '8ENj')]], 253 | 'qualitys': _0x45a375[_0x4707e2(0xc0, '#2e$')](_0x238e3a, _0x45a375[_0x4707e2(0xb2, 'Qcnx')]) ? [] : MUSIC_QUALITY[_0x238e3a] 254 | }; 255 | }), on(EVENT_NAMES[_0x2375d4(0xf8, 'fxV0')], ({ 256 | action: _0x1581a9, 257 | source: _0x3c5ae4, 258 | info: _0x17eeb1 259 | }) => { 260 | const _0x192f1e = _0x2375d4, 261 | _0x42ed7b = { 262 | 'WFJdH': _0x192f1e(0x101, '5xm9'), 263 | 'GMfru': function(_0x120e2c, _0x50126f, _0x4befe1, _0x3e262f) { 264 | return _0x120e2c(_0x50126f, _0x4befe1, _0x3e262f); 265 | } 266 | }; 267 | switch (_0x1581a9) { 268 | case _0x42ed7b[_0x192f1e(0x9e, '1L(9')]: 269 | return _0x42ed7b[_0x192f1e(0xc2, 'zDR%')](handleGetMusicUrl, _0x3c5ae4, _0x17eeb1['musicInfo'], _0x17eeb1[_0x192f1e(0xce, '1&KV')])['then'](_0x136577 => Promise[_0x192f1e(0xab, '1O6f')](_0x136577))['catch'](_0x591312 => Promise[_0x192f1e(0xb7, 'TtRP')](_0x591312)); 270 | default: 271 | return Promise['reject'](_0x192f1e(0xbe, '8SsA')); 272 | } 273 | }); 274 | 275 | function _0x3e54() { 276 | const _0x1424ce = (function() { 277 | return [_0xod2, 'QjqRsJjiPafmRihTB.GhDcuoSmxEp.vL7SASAFNd==', 'W6XiErGmowhdJmoeoCkmWQVcUSkEW6ddMSoT', 'z8kNkMO', 'C33cTq', 'hf5IWPJcHsDNW6/cTWmw', 'umkfW7mdW7i', 'AmkMx8o8WOa', 'drfUzCoyng/dSSo7', 'yHOdW5JdSq', 'WOOSymkwe8kKW7JdP8oM', 't0iwlSoXjmkSWQeQWOuDwq', 'qKvSW78Ubx8', 'cX8JW4VdNWf9W6pdQa', 'vJZdRvm', 'd8k+fe5j', 'rc0QqW', 'WQVdU8o8qq', 'BKNcUgHpW5O', 'dd9GWPhdRNWEW5VdIJv4W6VdIJSpzCkcymoJd8kZdmocW5ldSCkroSoyaa/cKmkhWR93WRlcVSo0W6zuyHTyWOBdT8k1h8oeFvFdLqxdRxu', 'WP7dU3qoWOZdV1BdPGNdPSkwWPyc', 'W7xcVmk/q8ksWPJdPCoF', 'WRJcU8k3', 'hfXUW4e', 'Bmo0FSkK', 'WO15va', 'eSo5omkJW6xdTt88W6zsyW', 'Ft8+', 'A3ymnbDuWRFcHq', 'DsmIyK0', 'E20jpW', 'q8oSvZlcOCk2w8oMWRmWzty', 'zXBdHLtcUa', 'WPRcPSoGWOacWQZcTIevsIXMW6/cIKK9lSoMWQaSqaBdUmkEWO84WQW2WPS5WPxcT2JdUCkst8kkqgKbl1KexLpcI1VdU8oGycFdLX4OvSkImmk0W551W7VcVG', 'qcC6bK8nEWpcOmoJmuZdGq', 'W7yLeKtcJdpdUItcH8kfWOy', 'xmkpdYDlWPfBmw54WOqzWPDRkmoUwSkv', 'l01voW'].concat((function() { 278 | return ['F8kTpx58zeW', 'D8orWPW', 'c8omW4WzWQu', 'WO43ESklfCkF', 'gmooWPqA', 'W67dMmk6qCkbWQ/dLmkfyCkntmkGca', 'aMhcU3VcKZfscH0', 'W6SGcaq2u0W', 'wK45nSoDmZNdL8oyl0j7W4C', 'W4JcImkvxSkN', 'jmoUWQWrfa', 'W5SpsCoyAmoRsvK', 'W4evW5tdIW', 'BfDpB2eM', 'kmkaxLiA', 'qqe1W4VdNW', 'AtRdG3JcOq', 'W4mVfIW', 'W4qpvmomACoNxG', 'AMChpXbb', 'W4VcPczD', 'lSkjdxP9l8k0WQRdTIHwc8kBk8kFimoZWPOxFSonW5JdG8kqWOJdJsXSsqBdQSoFW74ZWPPIWPZcQSkm', 'yuVcSh8', 'uHmnvG', 'imkcW5Hy', 'bSogW7rJFr9p', 'j8kEdwnHE8k7W6VdUcWFvSknpSkbkmo0WOC', 'yCkXWRRdUJ3dNaZcTWxdNgmtW6S', 'rCk4CCohWP8', 'jCkshw8', 'W6/cO8oMW6FdMq', 'wuW4tCkjC3RdLmo+', 'omo5WO9EWPCpmL0sW7KPW7xcRa', 'q8k2bMTt', 'ct5NWOJdVG', 'cb5oDSkRnmohWPyxWQm0', 'W5pcT8ksWOO', 'CSoJW7HdvG'].concat((function() { 279 | return ['6icX5zg1tLBcO+AoPEwpRSk7WQCbsJJdSI/cJ1WB', 'W4RcSHldHGe', 'WRjNsG', 'v3KKWOO', 'WOBcQ8oKWPu', 'WQlcO8o+WRqE', 'WPeuq8oByCkZufNcJIjXA8kzfZpcK8kN', 'saOYvmoS', 'cWZcJW', 'Dr3dPuRcMWZcKa', 'eSo7p8kHW6tcOuyVW5nbzMVcJa', 'zfPuB2uBA8kX', 'xK0jiq', 'wruowW', 'aWL7DSkzoIlcTmoUe1O2W6yJWPnFsmobamogWRJdTxfsW7JdLmkJu8kWySomdCklWRuRFY91w8oEW7pcRrW1WQ/cH8oKW7Deg8kAg8kPxmkCW6e', 'W53cSdhdOq4', 'WQxcSSkRWQtdUW', 'yCkZWRZdUt7dNfVcRr3dRNWY', 'WQr6qHm', 'WRddHmo7WPug', 'WPNdUxPt', 'W5emw8oinSk6wepcLq', 'B8kTn3W', 'WOeShrdcTW', 'WO0JWP8', 'EmoxW7fswq', 'wSkiW6iEW7u', 'WQzzCGW', 'W4dcOJbDW4S', 'u095W68', 'xeaCiW', 'oSoiW54JW4DqcGpcIW', 'rCk9W64yW6e', 'WPFcLSkhWQ7dOG', 'W4ZcGmoFqwjvW4LyW67cVeNdSCkh', 'iCkydsP7z8o3WQxdSIPnsSkk']; 280 | }())); 281 | }())); 282 | }()); 283 | _0x3e54 = function() { 284 | return _0x1424ce; 285 | }; 286 | return _0x3e54(); 287 | }; 288 | const scriptInfo = globalThis.lx.currentScriptInfo; 289 | 290 | if ( 291 | scriptInfo.name !== "聚合API接口 (by lerd)" || 292 | scriptInfo.description !== "理论可听全平台无损" || 293 | scriptInfo.version !== "v2.0.0" || 294 | scriptInfo.author !== "lerd" 295 | ) { 296 | throw new Error("初始化失败!将音源 名字、描述、版本号、作者和主页回正,以初始化成功"); 297 | } 298 | 299 | send(EVENT_NAMES.inited, { status: true, openDevTools: DEV_ENABLE, sources: musicSources }) -------------------------------------------------------------------------------- /lx-music-source.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * @name Free listen 3 | * @description A lx-music source 4 | * @version v1.1.2 5 | * @wy_token null 6 | * @wy_token_desc 如果你有网易音乐的会员,可启用vip歌曲、更高音质的支持,将上面 @wy_token null 中的 null 改为你的token即可,token获取方式看常见问题歌单导入 7 | * @wy_token_desc 需要注意的是,自定义 token 存在导致账号被封禁的风险,token是账号的临时秘钥,注意不要随意分享 8 | */ 9 | /******/ (() => { // webpackBootstrap 10 | /******/ "use strict"; 11 | var __webpack_exports__ = {}; 12 | 13 | ;// CONCATENATED MODULE: ./src/lx.js 14 | const { EVENT_NAMES: lx_EVENT_NAMES, on, send: lx_send, request, utils: lxUtils, version, currentScriptInfo } = globalThis.lx 15 | // console.log(globalThis.lx) 16 | 17 | 18 | // https://github.com/lyswhut/lx-music-desktop/blob/master/FAQ.md#windowlxutils 19 | const utils = { 20 | buffer: { 21 | from: lxUtils.buffer.from, 22 | bufToString: lxUtils.buffer.bufToString, 23 | }, 24 | crypto: { 25 | aesEncrypt: lxUtils.crypto.aesEncrypt, 26 | md5: lxUtils.crypto.md5, 27 | randomBytes: lxUtils.crypto.randomBytes, 28 | rsaEncrypt: lxUtils.crypto.rsaEncrypt, 29 | }, 30 | } 31 | 32 | const currentScript = currentScriptInfo 33 | ? currentScriptInfo.rawScript 34 | : document.getElementsByTagName('script')[0].innerText 35 | 36 | 37 | 38 | ;// CONCATENATED MODULE: ./src/apis/kw.js 39 | 40 | 41 | const qualitys = { 42 | '128k': '128kmp3', 43 | '320k': '320kmp3', 44 | // ape: 'ape', 45 | // flac: 'flac', 46 | } 47 | 48 | 49 | let token = '' 50 | let cookie = '' 51 | let key = '' 52 | 53 | function encrypt(str, pwd) { 54 | if (pwd == null || pwd.length <= 0) { 55 | console.log('Please enter a password with which to encrypt the message.') 56 | return null 57 | } 58 | let prand = '' 59 | for (let i = 0; i < pwd.length; i++) { 60 | prand += pwd.charCodeAt(i).toString() 61 | } 62 | let sPos = Math.floor(prand.length / 5) 63 | let mult = parseInt(prand.charAt(sPos) + prand.charAt(sPos * 2) + prand.charAt(sPos * 3) + prand.charAt(sPos * 4) + prand.charAt(sPos * 5)) 64 | let incr = Math.ceil(pwd.length / 2) 65 | let modu = Math.pow(2, 31) - 1 66 | if (mult < 2) { 67 | console.log('Algorithm cannot find a suitable hash. Please choose a different password. \nPossible considerations are to choose a more complex or longer password.') 68 | return null 69 | } 70 | let salt = Math.round(Math.random() * 1000000000) % 100000000 71 | prand += salt 72 | while (prand.length > 10) { 73 | prand = (parseInt(prand.substring(0, 10)) + parseInt(prand.substring(10, prand.length))).toString() 74 | } 75 | prand = (mult * prand + incr) % modu 76 | let enc_chr = '' 77 | let enc_str = '' 78 | for (let i = 0; i < str.length; i++) { 79 | enc_chr = parseInt(str.charCodeAt(i) ^ Math.floor((prand / modu) * 255)) 80 | if (enc_chr < 16) { 81 | enc_str += '0' + enc_chr.toString(16) 82 | } else enc_str += enc_chr.toString(16) 83 | prand = (mult * prand + incr) % modu 84 | } 85 | salt = salt.toString(16) 86 | while (salt.length < 8)salt = '0' + salt 87 | enc_str += salt 88 | return enc_str 89 | } 90 | const createToken = (cookieToken, currentKey) => { 91 | if (currentKey && key != currentKey) key = currentKey 92 | return encrypt(cookieToken, key) 93 | } 94 | const parseCookieToken = (cookies) => { 95 | if (!cookies) return '' 96 | let cookieToken = Array.isArray(cookies) ? cookies.find(str => str.startsWith('Hm_Iuvt_')) : cookies.match(/Hm_Iuvt_\w+=\w+;/)?.[0] 97 | if (!cookieToken) return '' 98 | cookieToken = cookieToken.split(';')[0] 99 | cookie = cookieToken 100 | cookieToken = cookieToken.split('=')[1] 101 | return cookieToken 102 | } 103 | const getToken = () => new Promise((resolve, reject) => { 104 | let defaultKey = 'Hm_Iuvt_cdb524f42f0ce19b169a8071123a4700' 105 | request('http://www.kuwo.cn/', { 106 | headers: { 107 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0', 108 | Referer: 'http://www.kuwo.cn/', 109 | }, 110 | }, async function(error, response) { 111 | if (error) return reject(new Error('failed')) 112 | const token = parseCookieToken(response.headers['set-cookie']) 113 | if (!token) return reject(new Error('Invalid cookie')) 114 | const result = response.body.match(/https?:\/\/[/.\w]+\/kw-www\/\w+\.js/g) 115 | if (result) { 116 | const getAppToken = (url) => new Promise((resolve) => { 117 | request(url, { 118 | headers: { 119 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0', 120 | Referer: 'http://www.kuwo.cn/', 121 | }, 122 | }, function(error, response) { 123 | if (error) return resolve('') 124 | const result = response.body.match(/Hm_Iuvt_(\w+)/) 125 | if (result) { 126 | resolve(createToken(token, result[0])) 127 | } else resolve('') 128 | }) 129 | }) 130 | const appRxp = /app\.\w+\.js/ 131 | const index = result.findIndex(l => appRxp.test(l)) 132 | if (index > -1) { 133 | const token = getAppToken(result[index]) 134 | if (token) return resolve(token) 135 | result.splice(index, 1) 136 | } 137 | while (result.length) { 138 | const token = await getAppToken(result.pop()) 139 | if (token) return resolve(token) 140 | } 141 | resolve(createToken(token, defaultKey)) 142 | } else { 143 | resolve(createToken(token, defaultKey)) 144 | } 145 | }) 146 | }) 147 | 148 | 149 | /* harmony default export */ const kw = ({ 150 | info: { 151 | name: '酷我音乐', 152 | type: 'music', 153 | actions: ['musicUrl'], 154 | qualitys: ['128k', '320k'], 155 | }, 156 | 157 | async musicUrl({ songmid }, quality) { 158 | quality = qualitys[quality] 159 | 160 | const target_url = `http://www.kuwo.cn/api/v1/www/music/playUrl?mid=${songmid}&type=music&br=${quality}` 161 | // const target_url = `http://www.kuwo.cn/api/v1/www/music/playUrl?mid=${songmid}&type=convert_url3&br=${quality}` 162 | /* const target_url = 'https://www.kuwo.cn/url?' 163 | + `format=mp3&rid=${song_id}&response=url&type=convert_url3&br=128kmp3&from=web`; 164 | https://m.kuwo.cn/newh5app/api/mobile/v1/music/src/${song_id} */ 165 | 166 | if (!token) token = await getToken() 167 | 168 | return new Promise((resolve, reject) => { 169 | // console.log(songmid, quality) 170 | request(target_url, { 171 | method: 'GET', 172 | headers: { 173 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0', 174 | Referer: 'http://kuwo.cn/', 175 | Secret: token, 176 | cookie, 177 | }, 178 | }, (err, resp) => { 179 | console.log(resp.body) 180 | if (err) return reject(err) 181 | if (resp.body.code != 200) return reject(new Error('failed')) 182 | 183 | resolve(resp.body.data.url) 184 | }) 185 | }) 186 | }, 187 | }); 188 | 189 | ;// CONCATENATED MODULE: ./src/apis/kg.js 190 | 191 | 192 | // const qualitys = { 193 | // '128k': 'PQ', 194 | // '320k': 'HQ', 195 | // flac: 'SQ', 196 | // flac32bit: 'ZQ', 197 | // } 198 | 199 | // https://github.com/listen1/listen1_chrome_extension/blob/master/js/provider/kugou.js 200 | /* harmony default export */ const kg = ({ 201 | info: { 202 | name: '酷狗音乐', 203 | type: 'music', 204 | actions: ['musicUrl'], 205 | qualitys: ['128k'], 206 | }, 207 | 208 | musicUrl({ hash, albumId }, quality) { 209 | // quality = qualitys[quality] 210 | let target_url = `https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash=${hash}&platid=4&album_id=${albumId}&mid=00000000000000000000000000000000` 211 | return new Promise((resolve, reject) => { 212 | console.log(hash, quality) 213 | request(target_url, { 214 | method: 'GET', 215 | }, (err, resp) => { 216 | console.log(resp.body) 217 | if (err) return reject(err) 218 | const data = resp.body 219 | 220 | if (data.status !== 1) return reject(new Error(data.err_code)) 221 | if (data.data.privilege > 9) return reject(new Error('failed')) 222 | 223 | resolve(resp.body.data.play_backup_url) 224 | }) 225 | }) 226 | }, 227 | }); 228 | 229 | ;// CONCATENATED MODULE: ./src/apis/tx.js 230 | 231 | 232 | const fileConfig = { 233 | '128k': { 234 | s: 'M500', 235 | e: '.mp3', 236 | bitrate: '128kbps', 237 | }, 238 | '320k': { 239 | s: 'M800', 240 | e: '.mp3', 241 | bitrate: '320kbps', 242 | }, 243 | flac: { 244 | s: 'F000', 245 | e: '.flac', 246 | bitrate: 'FLAC', 247 | }, 248 | } 249 | 250 | // https://github.com/listen1/listen1_chrome_extension/blob/master/js/provider/qq.js 251 | /* harmony default export */ const tx = ({ 252 | info: { 253 | name: '企鹅音乐', 254 | type: 'music', 255 | actions: ['musicUrl'], 256 | qualitys: ['128k'], 257 | }, 258 | 259 | musicUrl({ songmid, strMediaMid }, quality) { 260 | const target_url = 'https://u.y.qq.com/cgi-bin/musicu.fcg' 261 | // thanks to https://github.com/Rain120/qq-music-api/blob/2b9cb811934888a532545fbd0bf4e4ab2aea5dbe/routers/context/getMusicPlay.js 262 | const guid = '10000' 263 | const songmidList = [songmid] 264 | const uin = '0' 265 | 266 | const fileInfo = fileConfig[quality] 267 | const file = `${fileInfo.s}${strMediaMid}${fileInfo.e}` 268 | /* songmidList.length === 1 && 269 | `${fileInfo.s}${songmid}${songmid}${fileInfo.e}`*/ 270 | 271 | const reqData = { 272 | req_0: { 273 | module: 'vkey.GetVkeyServer', 274 | method: 'CgiGetVkey', 275 | param: { 276 | filename: file ? [file] : [], 277 | guid, 278 | songmid: songmidList, 279 | songtype: [0], 280 | uin, 281 | loginflag: 1, 282 | platform: '20', 283 | }, 284 | }, 285 | loginUin: uin, 286 | comm: { 287 | uin, 288 | format: 'json', 289 | ct: 24, 290 | cv: 0, 291 | }, 292 | } 293 | return new Promise((resolve, reject) => { 294 | console.log(songmid, quality) 295 | request(`${target_url}?format=json&data=${JSON.stringify(reqData)}`, { 296 | method: 'GET', 297 | headers: { 298 | channel: '0146951', 299 | uid: 1234, 300 | }, 301 | }, (err, resp) => { 302 | console.log(resp.body) 303 | if (err) return reject(err) 304 | const data = resp.body 305 | const { purl } = data.req_0.data.midurlinfo[0] 306 | 307 | // vip 308 | if (purl === '') return reject(new Error('failed')) 309 | 310 | const url = data.req_0.data.sip[0] + purl 311 | 312 | resolve(url) 313 | }) 314 | }) 315 | }, 316 | }); 317 | 318 | ;// CONCATENATED MODULE: ./src/utils.js 319 | 320 | 321 | 322 | const buf2hex = buffer => { // buffer is an ArrayBuffer 323 | return version 324 | ? utils.buffer.bufToString(buffer, 'hex') 325 | : [...new Uint8Array(buffer)] 326 | .map(x => x.toString(16).padStart(2, '0')) 327 | .join('') 328 | } 329 | 330 | const aesEncrypt = (data, eapiKey, iv, mode) => { 331 | if (!version) { 332 | mode = mode.split('-').pop() 333 | } 334 | return utils.crypto.aesEncrypt(data, mode, eapiKey, iv) 335 | } 336 | 337 | const md5 = str => utils.crypto.md5(str) 338 | 339 | 340 | const showUpdateAlert = () => { 341 | send(EVENT_NAMES.updateAlert, { 342 | log: 'hello world', 343 | updateUrl: 'https://xxx.com', 344 | }) 345 | } 346 | 347 | // https://stackoverflow.com/a/53387532 348 | const compareVersions = ((prep, l, i, r) => (a, b) => { 349 | a = prep(a) 350 | b = prep(b) 351 | l = Math.max(a.length, b.length) 352 | i = 0 353 | r = i 354 | // convert into integer, uncluding undefined values 355 | while (!r && i < l) r = ~~a[i] - ~~b[i++] 356 | 357 | return r < 0 ? -1 : (r ? 1 : 0) 358 | })(t => ('' + t) 359 | // treat non-numerical characters as lower version 360 | // replacing them with a negative number based on charcode of first character 361 | .replace(/[^\d.]+/g, c => '.' + (c.replace(/[\W_]+/, '').toUpperCase().charCodeAt(0) - 65536) + '.') 362 | // remove trailing "." and "0" if followed by non-numerical characters (1.0.0b); 363 | .replace(/(?:\.0+)*(\.-\d+(?:\.\d+)?)\.*$/g, '$1') 364 | // return array 365 | .split('.')) 366 | 367 | ;// CONCATENATED MODULE: ./src/apis/wy.js 368 | 369 | 370 | 371 | const parse = (str) => { 372 | let comment = /^\/\*(?:.|\n)+?\*\//.exec(str)?.[0] 373 | if (!comment) return '' 374 | let token = /\*\s*@wy_token\s+(.+)/.exec(comment)?.[1]?.trim() 375 | return (!token || token == 'null') ? '' : token 376 | } 377 | const wy_token = parse(currentScript) 378 | 379 | const wy_qualitys = { 380 | '128k': 128000, 381 | '320k': 320000, 382 | flac: 999000, 383 | } 384 | const eapi = (url, object) => { 385 | const eapiKey = 'e82ckenh8dichen8' 386 | 387 | const text = typeof object === 'object' ? JSON.stringify(object) : object 388 | const message = `nobody${url}use${text}md5forencrypt` 389 | const digest = md5(message) 390 | const data = `${url}-36cd479b6b5-${text}-36cd479b6b5-${digest}` 391 | return { 392 | params: buf2hex(aesEncrypt(data, eapiKey, '', 'aes-128-ecb')).toUpperCase(), 393 | } 394 | } 395 | 396 | let wy_cookie = 'os=pc' 397 | if (wy_token) wy_cookie = `MUSIC_U=${wy_token}; ` + wy_cookie 398 | 399 | // https://github.com/listen1/listen1_chrome_extension/blob/master/js/provider/netease.js 400 | /* harmony default export */ const wy = ({ 401 | info: { 402 | name: '网易音乐', 403 | type: 'music', 404 | actions: ['musicUrl'], 405 | qualitys: wy_token ? ['128k', '320k', 'flac'] : ['128k'], 406 | }, 407 | 408 | musicUrl({ songmid }, quality) { 409 | quality = wy_qualitys[quality] 410 | const target_url = 'https://interface3.music.163.com/eapi/song/enhance/player/url' 411 | const eapiUrl = '/api/song/enhance/player/url' 412 | 413 | const d = { 414 | ids: `[${songmid}]`, 415 | br: quality, 416 | } 417 | const data = eapi(eapiUrl, d) 418 | 419 | return new Promise((resolve, reject) => { 420 | console.log(songmid, quality) 421 | request(target_url, { 422 | method: 'POST', 423 | form: data, 424 | headers: { 425 | cookie: wy_cookie, 426 | }, 427 | }, (err, resp) => { 428 | console.log(resp.body) 429 | if (err) return reject(err) 430 | if (resp.headers.cookie) wy_cookie = resp.headers.cookie 431 | 432 | let res_data = resp.body 433 | const { url, freeTrialInfo } = res_data.data[0] 434 | if (!url || freeTrialInfo) return reject(new Error('failed')) 435 | resolve(url) 436 | }) 437 | }) 438 | }, 439 | }); 440 | 441 | ;// CONCATENATED MODULE: ./src/apis/mg.js 442 | 443 | 444 | const mg_qualitys = { 445 | '128k': 'PQ', 446 | '320k': 'HQ', 447 | flac: 'SQ', 448 | flac24bit: 'ZQ', 449 | } 450 | 451 | // https://github.com/listen1/listen1_chrome_extension/blob/master/js/provider/migu.js 452 | /* harmony default export */ const mg = ({ 453 | info: { 454 | name: '咪咕音乐', 455 | type: 'music', 456 | actions: ['musicUrl'], 457 | qualitys: ['128k'], 458 | }, 459 | 460 | musicUrl({ songmid }, quality) { 461 | quality = mg_qualitys[quality] 462 | /* 463 | const copyrightId = track.id.slice('mgtrack_'.length); 464 | const type = 1; 465 | // NOTICE:howler flac support is not ready for production. 466 | // Sometimes network keep pending forever and block later music. 467 | // So use normal quality. 468 | // switch (track.quality) { 469 | // case '110000': 470 | // type = 2; 471 | // break; 472 | // case '111100': 473 | // type = 3; 474 | // break; 475 | // case '111111': 476 | // type = 4; 477 | // break; 478 | // default: 479 | // type = 1; 480 | // } 481 | const k = 482 | '4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e'; 483 | // type parameter for music quality: 1: normal, 2: hq, 3: sq, 4: zq, 5: z3d 484 | const plain = forge.util.createBuffer( 485 | `{"copyrightId":"${copyrightId}","type":${type},"auditionsFlag":0}` 486 | ); 487 | const salt = forge.random.getBytesSync(8); 488 | const derivedBytes = forge.pbe.opensslDeriveBytes(k, salt, 48); 489 | const buffer = forge.util.createBuffer(derivedBytes); 490 | const key = buffer.getBytes(32); 491 | const iv = buffer.getBytes(16); 492 | const cipher = forge.cipher.createCipher('AES-CBC', key); 493 | cipher.start({ iv }); 494 | cipher.update(plain); 495 | cipher.finish(); 496 | const output = forge.util.createBuffer(); 497 | output.putBytes('Salted__'); 498 | output.putBytes(salt); 499 | output.putBuffer(cipher.output); 500 | const aesResult = forge.util.encode64(output.bytes()); 501 | const publicKey = 502 | '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8asrfSaoOb4je+DSmKdriQJKW\nVJ2oDZrs3wi5W67m3LwTB9QVR+cE3XWU21Nx+YBxS0yun8wDcjgQvYt625ZCcgin\n2ro/eOkNyUOTBIbuj9CvMnhUYiR61lC1f1IGbrSYYimqBVSjpifVufxtx/I3exRe\nZosTByYp4Xwpb1+WAQIDAQAB\n-----END PUBLIC KEY-----'; 503 | const secKey = forge.util.encode64( 504 | forge.pki.publicKeyFromPem(publicKey).encrypt(k) 505 | ); 506 | const target_url = `https://music.migu.cn/v3/api/music/audioPlayer/getPlayInfo?dataType=2&data=${encodeURIComponent( 507 | aesResult 508 | )}&secKey=${encodeURIComponent(secKey)}`; 509 | */ 510 | const target_url = `https://app.c.nf.migu.cn/MIGUM2.0/strategy/listen-url/v2.2?netType=01&resourceType=E&songId=${songmid}&toneFlag=${quality}` 511 | return new Promise((resolve, reject) => { 512 | console.log(songmid, quality) 513 | request(target_url, { 514 | method: 'GET', 515 | headers: { 516 | channel: '0146951', 517 | uid: '0', 518 | }, 519 | }, (err, resp) => { 520 | console.log(resp.body) 521 | if (err) return reject(err) 522 | let playUrl = resp.body.data?.url 523 | if (!playUrl) return reject(new Error('failed')) 524 | 525 | if (playUrl.startsWith('//')) playUrl = `https:${playUrl}` 526 | 527 | resolve(playUrl.replace(/\+/g, '%2B').split('?')[0]) 528 | }) 529 | }) 530 | }, 531 | }); 532 | 533 | ;// CONCATENATED MODULE: ./src/apis/index.js 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | /* harmony default export */ const apis = ({ 542 | kw: kw, 543 | kg: kg, 544 | tx: tx, 545 | wy: wy, 546 | mg: mg, 547 | }); 548 | 549 | ;// CONCATENATED MODULE: ./package.json 550 | const package_namespaceObject = /*#__PURE__*/JSON.parse('{"UU":"lx-music-source","rE":"1.1.2","cy":"lyswhut"}'); 551 | ;// CONCATENATED MODULE: ./src/update.js 552 | 553 | 554 | 555 | 556 | const address = [ 557 | `https://raw.githubusercontent.com/${package_namespaceObject.cy}/${package_namespaceObject.UU}/master`, 558 | `https://cdn.jsdelivr.net/gh/${package_namespaceObject.cy}/${package_namespaceObject.UU}`, 559 | `https://fastly.jsdelivr.net/gh/${package_namespaceObject.cy}/${package_namespaceObject.UU}`, 560 | `https://gcore.jsdelivr.net/gh/${package_namespaceObject.cy}/${package_namespaceObject.UU}`, 561 | ] 562 | 563 | const getLatestVersion = async(url, retryNum = 0) => { 564 | return new Promise((resolve, reject) => { 565 | request(url, { 566 | timeout: 10000, 567 | }, (err, resp) => { 568 | if (err || resp.statusCode != 200) { 569 | ++retryNum >= 3 570 | ? reject(err || new Error(resp.statusMessage || resp.statusCode)) 571 | : getLatestVersion(url, retryNum).then(resolve).catch(reject) 572 | } else resolve(resp.body) 573 | }) 574 | }).then(info => { 575 | if (info.version == null) throw new Error('failed') 576 | return info.version 577 | }) 578 | } 579 | 580 | const getVersion = async(index = 0) => { 581 | return getLatestVersion(address[index] + '/package.json').then(version => { 582 | return { 583 | version, 584 | url: address[index] + '/dist/lx-music-source.js', 585 | } 586 | }).catch(async(err) => { 587 | index++ 588 | if (index >= address.length) throw err 589 | return getVersion(index) 590 | }) 591 | } 592 | 593 | const checkLatestVersion = async() => { 594 | const remoteVersion = await getVersion() 595 | return compareVersions(package_namespaceObject.rE, remoteVersion.version) < 0 ? remoteVersion : null 596 | } 597 | 598 | ;// CONCATENATED MODULE: ./src/index.js 599 | 600 | 601 | 602 | 603 | // console.log(window.lx) 604 | 605 | on(lx_EVENT_NAMES.request, ({ source, action, info }) => { 606 | switch (action) { 607 | case 'musicUrl': 608 | return apis[source].musicUrl(info.musicInfo, info.type).catch((err) => { 609 | console.log(err.message) 610 | return Promise.reject(err) 611 | }) 612 | } 613 | }) 614 | 615 | const sources = {} 616 | for (const [source, apiInfo] of Object.entries(apis)) { 617 | sources[source] = apiInfo.info 618 | } 619 | 620 | lx_send(lx_EVENT_NAMES.inited, { 621 | status: true, 622 | // openDevTools: true, 623 | // eslint-disable-next-line no-undef 624 | openDevTools: "production" === 'development', 625 | sources, 626 | }) 627 | 628 | checkLatestVersion().then((version) => { 629 | if (!version) return 630 | lx_send(lx_EVENT_NAMES.updateAlert, { log: '发现新版本 v' + version.version, updateUrl: version.url }) 631 | }) 632 | 633 | /******/ })() 634 | ; --------------------------------------------------------------------------------