2020-07-02 11:50:39 +08:00
const $ = new Env ( '网易云音乐' )
$ . VAL _session = $ . getdata ( 'chavy_cookie_neteasemusic' )
$ . CFG _retryCnt = ( $ . getdata ( 'CFG_neteasemusic_retryCnt' ) || '10' ) * 1
$ . CFG _retryInterval = ( $ . getdata ( 'CFG_neteasemusic_retryInterval' ) || '500' ) * 1
! ( async ( ) => {
2020-07-02 11:52:57 +08:00
$ . log ( '' , ` 🔔 ${ $ . name } , 开始! ` , '' )
init ( )
await signweb ( )
await signapp ( )
await getInfo ( )
await showmsg ( )
2020-07-02 11:50:39 +08:00
} ) ( )
2020-07-02 11:52:57 +08:00
. catch ( ( e ) => {
$ . log ( '' , ` ❌ ${ $ . name } , 失败! 原因: ${ e } ! ` , '' )
} )
. finally ( ( ) => {
$ . msg ( $ . name , $ . subt , $ . desc ) , $ . log ( '' , ` 🔔 ${ $ . name } , 结束! ` , '' ) , $ . done ( )
} )
2020-07-02 11:50:39 +08:00
function init ( ) {
2020-07-02 11:52:57 +08:00
$ . isNewCookie = /https:\/\/music.163.com\/weapi\/user\/level/ . test ( $ . VAL _session )
$ . Cookie = $ . isNewCookie ? JSON . parse ( $ . VAL _session ) . headers . Cookie : $ . VAL _session
2020-07-02 11:50:39 +08:00
}
async function signweb ( ) {
2020-07-02 11:52:57 +08:00
for ( let signIdx = 0 ; signIdx < $ . CFG _retryCnt ; signIdx ++ ) {
await new Promise ( ( resove ) => {
const url = { url : ` http://music.163.com/api/point/dailyTask?type=1 ` , headers : { } }
url . headers [ 'Cookie' ] = $ . Cookie
url . headers [ 'Host' ] = 'music.163.com'
url . headers [ 'User-Agent' ] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15'
$ . get ( url , ( error , response , data ) => {
try {
$ . isWebSuc = JSON . parse ( data ) . code === - 2
$ . log ( ` [Web] 第 ${ signIdx + 1 } 次: ${ data } ` )
} catch ( e ) {
$ . isWebSuc = false
$ . log ( ` ❗️ ${ $ . name } , 执行失败! ` , ` error = ${ error || e } ` , ` response = ${ JSON . stringify ( response ) } ` , '' )
} finally {
resove ( )
}
} )
} )
await new Promise ( $ . wait ( $ . CFG _retryInterval ) )
if ( $ . isWebSuc ) break
}
2020-07-02 11:50:39 +08:00
}
async function signapp ( ) {
2020-07-02 11:52:57 +08:00
for ( let signIdx = 0 ; signIdx < $ . CFG _retryCnt ; signIdx ++ ) {
await new Promise ( ( resove ) => {
const url = { url : ` http://music.163.com/api/point/dailyTask?type=0 ` , headers : { } }
url . headers [ 'Cookie' ] = $ . Cookie
url . headers [ 'Host' ] = 'music.163.com'
url . headers [ 'User-Agent' ] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1'
$ . get ( url , ( error , response , data ) => {
try {
$ . isAppSuc = JSON . parse ( data ) . code === - 2
$ . log ( ` [App] 第 ${ signIdx + 1 } 次: ${ data } ` )
} catch ( e ) {
$ . isAppSuc = false
$ . log ( ` ❗️ ${ $ . name } , 执行失败! ` , ` error = ${ error || e } ` , ` response = ${ JSON . stringify ( response ) } ` , '' )
} finally {
resove ( )
}
} )
} )
await new Promise ( $ . wait ( $ . CFG _retryInterval ) )
if ( $ . isAppSuc ) break
}
2020-07-02 11:50:39 +08:00
}
function getInfo ( ) {
2020-07-02 11:52:57 +08:00
if ( ! $ . isNewCookie ) return
return new Promise ( ( resove ) => {
$ . post ( JSON . parse ( $ . VAL _session ) , ( error , response , data ) => {
try {
$ . userInfo = JSON . parse ( data )
} catch ( e ) {
$ . log ( ` ❗️ ${ $ . name } , 执行失败! ` , ` error = ${ error || e } ` , ` response = ${ JSON . stringify ( response ) } ` , '' )
} finally {
resove ( )
}
} )
2020-07-02 11:50:39 +08:00
} )
}
function showmsg ( ) {
2020-07-02 11:52:57 +08:00
return new Promise ( ( resove ) => {
$ . subt = $ . isWebSuc ? 'PC: 成功' : 'PC: 失败'
$ . subt += $ . isAppSuc ? ', APP: 成功' : ', APP: 失败'
if ( $ . isNewCookie && $ . userInfo ) {
$ . desc = ` 等级: ${ $ . userInfo . data . level } , 听歌: ${ $ . userInfo . data . nowPlayCount } => ${ $ . userInfo . data . nextPlayCount } 升级 (首) `
$ . desc = $ . userInfo . data . level === 10 ? ` 等级: ${ $ . userInfo . data . level } , 你的等级已爆表! ` : $ . desc
}
resove ( )
} )
2020-07-02 11:50:39 +08:00
}
// prettier-ignore
2020-07-02 11:52:57 +08:00
function Env ( s ) {
this . name = s , this . data = null , this . logs = [ ] , this . isSurge = ( ( ) => "undefined" != typeof $httpClient ) , this . isQuanX = ( ( ) => "undefined" != typeof $task ) , this . isNode = ( ( ) => "undefined" != typeof module && ! ! module . exports ) , this . log = ( ( ... s ) => {
this . logs = [ ... this . logs , ... s ] , s ? console . log ( s . join ( "\n" ) ) : console . log ( this . logs . join ( "\n" ) )
} ) , this . msg = ( ( s = this . name , t = "" , i = "" ) => {
this . isSurge ( ) && $notification . post ( s , t , i ) , this . isQuanX ( ) && $notify ( s , t , i ) ;
const e = [ "" , "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3==============" ] ;
s && e . push ( s ) , t && e . push ( t ) , i && e . push ( i ) , console . log ( e . join ( "\n" ) )
} ) , this . getdata = ( s => {
if ( this . isSurge ( ) ) return $persistentStore . read ( s ) ;
if ( this . isQuanX ( ) ) return $prefs . valueForKey ( s ) ;
if ( this . isNode ( ) ) {
const t = "box.dat" ;
return this . fs = this . fs ? this . fs : require ( "fs" ) , this . fs . existsSync ( t ) ? ( this . data = JSON . parse ( this . fs . readFileSync ( t ) ) , this . data [ s ] ) : null
}
} ) , this . setdata = ( ( s , t ) => {
if ( this . isSurge ( ) ) return $persistentStore . write ( s , t ) ;
if ( this . isQuanX ( ) ) return $prefs . setValueForKey ( s , t ) ;
if ( this . isNode ( ) ) {
const i = "box.dat" ;
return this . fs = this . fs ? this . fs : require ( "fs" ) , ! ! this . fs . existsSync ( i ) && ( this . data = JSON . parse ( this . fs . readFileSync ( i ) ) , this . data [ t ] = s , this . fs . writeFileSync ( i , JSON . stringify ( this . data ) ) , ! 0 )
}
} ) , this . wait = ( ( s , t = s ) => i => setTimeout ( ( ) => i ( ) , Math . floor ( Math . random ( ) * ( t - s + 1 ) + s ) ) ) , this . get = ( ( s , t ) => this . send ( s , "GET" , t ) ) , this . post = ( ( s , t ) => this . send ( s , "POST" , t ) ) , this . send = ( ( s , t , i ) => {
if ( this . isSurge ( ) ) {
const e = "POST" == t ? $httpClient . post : $httpClient . get ;
e ( s , ( s , t , e ) => {
t && ( t . body = e , t . statusCode = t . status ) , i ( s , t , e )
} )
}
this . isQuanX ( ) && ( s . method = t , $task . fetch ( s ) . then ( s => {
s . status = s . statusCode , i ( null , s , s . body )
} , s => i ( s . error , s , s ) ) ) , this . isNode ( ) && ( this . request = this . request ? this . request : require ( "request" ) , s . method = t , s . gzip = ! 0 , this . request ( s , ( s , t , e ) => {
t && ( t . status = t . statusCode ) , i ( null , t , e )
} ) )
} ) , this . done = ( ( s = { } ) => this . isNode ( ) ? null : $done ( s ) )
}