1
+ /*
2
+
3
+ [task_local]
4
+ #柠檬618限时盲盒
5
+ 0 0 * * * http://nm66.top/jd_xsmh.js, tag=柠檬618限时盲盒, img-url=https://raw.githubusercontent.com/Orz-3/mini/master/Color/jd.png, enabled=true
6
+ */
7
+
8
+
9
+ const $ = new Env ( '柠檬618限时盲盒' ) ;
10
+ const notify = $ . isNode ( ) ? require ( './sendNotify' ) : '' ;
11
+ //Node.js用户请在jdCookie.js处填写京东ck;
12
+ const jdCookieNode = $ . isNode ( ) ? require ( './jdCookie.js' ) : '' ;
13
+
14
+ //IOS等用户直接用NobyDa的jd cookie
15
+ let cookiesArr = [ ] , cookie = '' , message ;
16
+ let allMessage = '' ;
17
+
18
+
19
+ if ( $ . isNode ( ) ) {
20
+ Object . keys ( jdCookieNode ) . forEach ( ( item ) => {
21
+ cookiesArr . push ( jdCookieNode [ item ] )
22
+ } )
23
+ if ( process . env . JD_DEBUG && process . env . JD_DEBUG === 'false' ) console . log = ( ) => { } ;
24
+ } else {
25
+ cookiesArr = [ $ . getdata ( 'CookieJD' ) , $ . getdata ( 'CookieJD2' ) , ...jsonParse ( $ . getdata ( 'CookiesJD' ) || "[]" ) . map ( item => item . cookie ) ] . filter ( item => ! ! item ) ;
26
+ }
27
+ const JD_API_HOST = 'https://api.m.jd.com/client.action' ;
28
+
29
+ ! ( async ( ) => {
30
+ if ( ! cookiesArr [ 0 ] ) {
31
+ $ . msg ( $ . name , '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取' , 'https://bean.m.jd.com/bean/signIndex.action' , { "open-url" : "https://bean.m.jd.com/bean/signIndex.action" } ) ;
32
+ return ;
33
+ }
34
+
35
+ for ( let i = 0 ; i < cookiesArr . length ; i ++ ) {
36
+ if ( cookiesArr [ i ] ) {
37
+ cookie = cookiesArr [ i ] ;
38
+ $ . UserName = decodeURIComponent ( cookie . match ( / p t _ p i n = ( [ ^ ; ] + ) (? = ; ? ) / ) && cookie . match ( / p t _ p i n = ( [ ^ ; ] + ) (? = ; ? ) / ) [ 1 ] )
39
+ $ . pin = cookie . match ( / p t _ p i n = ( .+ ?) ; / ) [ 1 ]
40
+ $ . index = i + 1 ;
41
+ $ . isLogin = true ;
42
+ $ . nickName = '' ;
43
+ message = '' ;
44
+ await TotalBean ( ) ;
45
+ console . log ( `\n******开始【京东账号${ $ . index } 】${ $ . nickName || $ . UserName } *********\n` ) ;
46
+ if ( ! $ . isLogin ) {
47
+ $ . msg ( $ . name , `【提示】cookie已失效` , `京东账号${ $ . index } ${ $ . nickName || $ . UserName } \n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action` , { "open-url" : "https://bean.m.jd.com/bean/signIndex.action" } ) ;
48
+
49
+ if ( $ . isNode ( ) ) {
50
+ await notify . sendNotify ( `${ $ . name } cookie已失效 - ${ $ . UserName } ` , `京东账号${ $ . index } ${ $ . UserName } \n请重新登录获取cookie` ) ;
51
+ }
52
+ continue
53
+ }
54
+
55
+
56
+ await info ( )
57
+ await task ( 1 )
58
+ await task ( 2 )
59
+ await kmh ( )
60
+ await $ . wait ( 1000 )
61
+ await kmh ( )
62
+
63
+ }
64
+ }
65
+ if ( $ . isNode ( ) && allMessage ) {
66
+ await notify . sendNotify ( `${ $ . name } ` , `${ allMessage } ` )
67
+ }
68
+ } ) ( )
69
+ . catch ( ( e ) => {
70
+ $ . log ( '' , `❌ ${ $ . name } , 失败! 原因: ${ e } !` , '' )
71
+ } )
72
+ . finally ( ( ) => {
73
+ $ . done ( ) ;
74
+ } )
75
+
76
+ function info ( ) {
77
+ return new Promise ( async ( resolve ) => {
78
+ let options = {
79
+ url : `https://api.m.jd.com/client.action?functionId=signBeanAct&body={"fp":"-1","shshshfp":"-1","shshshfpa":"-1","referUrl":"-1","userAgent":"-1","jda":"-1","rnVersion":"3.9"}&appid=ld&client=android&clientVersion=9.1.4&networkType=4g&osVersion=10&uuid=7049442d7e415231&openudid=7049442d7e415231&jsonp=jsonp_1623319626959_24411` ,
80
+ headers : {
81
+ //"Origin": "https://h5.m.jd.com/",
82
+ //"Host": "api.m.jd.com",
83
+ "User-Agent" : "jdapp;android;9.1.4;10;7049442d7e415232;network/4g;model/PCAM00;addressid/0;aid/7049442d7e415232;oaid/;osVer/29;appBuild/84555;partner/oppo;jdSupportDarkMode/0;Mozilla/5.0 (Linux; Android 10; PCAM00 Build/QKQ1.190918.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36" ,
84
+ "Cookie" : cookie ,
85
+ }
86
+ }
87
+ $ . get ( options , async ( err , resp , data ) => {
88
+ try {
89
+ $ . info = jsonpToJson ( data ) ;
90
+ $ . info = JSON . stringify ( $ . info )
91
+ //$.log($.info.data.continuityAward.beanAward.beanCount)
92
+ if ( $ . info . code === 0 ) {
93
+ $ . log ( $ . info . data . continuityAward . beanAward . beanCount )
94
+ allMessage += `京东账号${ $ . index } -${ $ . nickName || $ . UserName } \n获得:${ $ . info . data . continuityAward . beanAward . beanCount } 京豆${ $ . index !== cookiesArr . length ? '\n\n' : '\n\n' } ` ;
95
+ }
96
+ } catch ( e ) {
97
+ $ . logErr ( e , resp ) ;
98
+ } finally {
99
+ resolve ( ) ;
100
+ }
101
+ } ) ;
102
+ } ) ;
103
+ }
104
+ function kmh ( ) {
105
+ return new Promise ( async ( resolve ) => {
106
+
107
+ let options = {
108
+ url : `https://api.m.jd.com/client.action?functionId=limitBoxDraw&body=%7B%7D&appid=ld&client=m&clientVersion=9.1.4&networkType=4g&osVersion=10&uuid=7049442d7e415232&openudid=7049442d7e415231&jsonp=jsonp_1623319640949_31804` ,
109
+ headers : {
110
+ //"Origin": "https://h5.m.jd.com/",
111
+ //"Host": "api.m.jd.com",
112
+ "User-Agent" : "jdapp;android;9.1.4;10;7049442d7e415232;network/4g;model/PCAM00;addressid/0;aid/7049442d7e415232;oaid/;osVer/29;appBuild/84555;partner/oppo;jdSupportDarkMode/0;Mozilla/5.0 (Linux; Android 10; PCAM00 Build/QKQ1.190918.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36" ,
113
+ "Cookie" : cookie ,
114
+ }
115
+ }
116
+ $ . get ( options , async ( err , resp , data ) => {
117
+ try {
118
+
119
+ $ . info1 = jsonpToJson ( data ) ;
120
+ $ . info1 = JSON . stringify ( $ . info1 )
121
+ $ . log ( $ . info1 )
122
+ if ( $ . info1 . code === 0 ) {
123
+ $ . log ( $ . info1 . data . beanNum )
124
+ allMessage += `京东账号${ $ . index } -${ $ . nickName || $ . UserName } \n获得:${ $ . info1 . data . beanNum } 京豆${ $ . index !== cookiesArr . length ? '\n\n' : '\n\n' } ` ;
125
+ }
126
+ } catch ( e ) {
127
+ $ . logErr ( e , resp ) ;
128
+ } finally {
129
+ resolve ( ) ;
130
+ }
131
+ } ) ;
132
+ } ) ;
133
+ }
134
+ function task ( type ) {
135
+ return new Promise ( async ( resolve ) => {
136
+ let options = {
137
+ url : `https://api.m.jd.com/client.action?functionId=limitBoxDoTask&body={"type":"${ type } "}&appid=ld&client=m&clientVersion=9.1.4&networkType=4g&osVersion=10&uuid=7049442d7e415232&openudid=7049442d7e415231&jsonp=jsonp_1623319743749_3939` ,
138
+ headers : {
139
+ //"Origin": "https://h5.m.jd.com/",
140
+ //"Host": "api.m.jd.com",
141
+ "User-Agent" : "jdapp;android;9.1.4;10;7049442d7e415232;network/4g;model/PCAM00;addressid/0;aid/7049442d7e415232;oaid/;osVer/29;appBuild/84555;partner/oppo;jdSupportDarkMode/0;Mozilla/5.0 (Linux; Android 10; PCAM00 Build/QKQ1.190918.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36" ,
142
+ "Cookie" : cookie ,
143
+ }
144
+ }
145
+ $ . get ( options , async ( err , resp , data ) => {
146
+ try {
147
+ $ . dotask = jsonpToJson ( data ) ;
148
+ $ . dotask = JSON . stringify ( $ . dotask )
149
+ //$.log($.info.data.continuityAward.beanAward.beanCount)
150
+ if ( $ . dotask . errorCode === "LB906" ) {
151
+ $ . log ( $ . dotask . errorMessage )
152
+ }
153
+ } catch ( e ) {
154
+ $ . logErr ( e , resp ) ;
155
+ } finally {
156
+ resolve ( ) ;
157
+ }
158
+ } ) ;
159
+ } ) ;
160
+ }
161
+
162
+ function jsonpToJson ( datas ) {
163
+ let jsonData = null
164
+ // 下面是对获取到的数据进行处理,把jsonp格式的数据处理成json格式的数据
165
+ if ( typeof datas === 'string' ) {
166
+ // 返回的是jsonp类型的数据,所以要用正则表达式来匹配截取json数据
167
+ const reg = / \w + \( ( \{ [ ^ ( ) ] + \} ) \) /
168
+ const matches = datas . match ( reg )
169
+ // matches匹配到的是数组,数组第一个是所有正则表达式匹配的字符串,第二个是第一个小括号匹配到的字符串
170
+ if ( matches ) {
171
+ jsonData = JSON . parse ( matches [ 1 ] )
172
+ }
173
+ }
174
+ return jsonData
175
+ }
176
+
177
+
178
+
179
+ async function taskPostUrl ( functionId , body ) {
180
+ return {
181
+ url : `${ JD_API_HOST } ` ,
182
+ body : `functionId=${ functionId } &body=${ escape ( JSON . stringify ( body ) ) } &client=wh5&clientVersion=1.0.0&appid=content_ecology&uuid=6898c30638c55142969304c8e2167997fa59eb54&t=1622588448365` ,
183
+ headers : {
184
+ 'Cookie' : cookie ,
185
+ 'Host' : 'api.m.jd.com' ,
186
+ 'Connection' : 'keep-alive' ,
187
+ 'Content-Type' : 'application/x-www-form-urlencoded' ,
188
+ "User-Agent" : $ . isNode ( ) ? ( process . env . JD_USER_AGENT ? process . env . JD_USER_AGENT : ( require ( './USER_AGENTS' ) . USER_AGENT ) ) : ( $ . getdata ( 'JDUA' ) ? $ . getdata ( 'JDUA' ) : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1" ) ,
189
+ 'Accept-Language' : 'zh-cn' ,
190
+ 'Accept-Encoding' : 'gzip, deflate, br' ,
191
+ }
192
+ }
193
+ }
194
+
195
+
196
+ async function TotalBean ( ) {
197
+ return new Promise ( async resolve => {
198
+ const options = {
199
+ "url" : `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2` ,
200
+ "headers" : {
201
+ "Accept" : "application/json,text/plain, */*" ,
202
+ "Content-Type" : "application/x-www-form-urlencoded" ,
203
+ "Accept-Encoding" : "gzip, deflate, br" ,
204
+ "Accept-Language" : "zh-cn" ,
205
+ "Connection" : "keep-alive" ,
206
+ "Cookie" : cookie ,
207
+ "Referer" : "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2" ,
208
+ "User-Agent" : $ . isNode ( ) ? ( process . env . JD_USER_AGENT ? process . env . JD_USER_AGENT : ( require ( './USER_AGENTS' ) . USER_AGENT ) ) : ( $ . getdata ( 'JDUA' ) ? $ . getdata ( 'JDUA' ) : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1" )
209
+ }
210
+ }
211
+ $ . post ( options , ( err , resp , data ) => {
212
+ try {
213
+ if ( err ) {
214
+ console . log ( `${ JSON . stringify ( err ) } ` )
215
+ console . log ( `${ $ . name } API请求失败,请检查网路重试` )
216
+ } else {
217
+ if ( data ) {
218
+ data = JSON . parse ( data ) ;
219
+ if ( data [ "retcode" ] === 13 ) {
220
+ $ . isLogin = false ; //cookie过期
221
+ return ;
222
+ }
223
+ if ( data [ "retcode" ] === 0 ) {
224
+ $ . nickName = ( data [ "base" ] && data [ "base" ] . nickname ) || $ . UserName ;
225
+ } else {
226
+ $ . nickName = $ . UserName ;
227
+ }
228
+ } else {
229
+ console . log ( `京东服务器返回空数据` )
230
+ }
231
+ }
232
+ } catch ( e ) {
233
+ $ . logErr ( e , resp )
234
+ } finally {
235
+ resolve ( ) ;
236
+ }
237
+ } )
238
+ } )
239
+ }
240
+ async function safeGet ( data ) {
241
+ try {
242
+ if ( typeof JSON . parse ( data ) == "object" ) {
243
+ return true ;
244
+ }
245
+ } catch ( e ) {
246
+ console . log ( e ) ;
247
+ console . log ( `京东服务器访问数据为空,请检查自身设备网络情况` ) ;
248
+ return false ;
249
+ }
250
+ }
251
+ function jsonParse ( str ) {
252
+ if ( typeof str == "string" ) {
253
+ try {
254
+ return JSON . parse ( str ) ;
255
+ } catch ( e ) {
256
+ console . log ( e ) ;
257
+ $ . msg ( $ . name , '' , '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie' )
258
+ return [ ] ;
259
+ }
260
+ }
261
+ }
262
+ // prettier-ignore
263
+
264
+ function Env ( t , e ) { "undefined" != typeof process && JSON . stringify ( process . env ) . indexOf ( "GITHUB" ) > - 1 && process . exit ( 0 ) ; class s { constructor ( t ) { this . env = t } send ( t , e = "GET" ) { t = "string" == typeof t ?{ url :t } :t ; let s = this . get ; return "POST" === e && ( s = this . post ) , new Promise ( ( e , i ) => { s . call ( this , t , ( t , s , r ) => { t ?i ( t ) :e ( s ) } ) } ) } get ( t ) { return this . send . call ( this . env , t ) } post ( t ) { return this . send . call ( this . env , t , "POST" ) } } return new class { constructor ( t , e ) { this . name = t , this . http = new s ( this ) , this . data = null , this . dataFile = "box.dat" , this . logs = [ ] , this . isMute = ! 1 , this . isNeedRewrite = ! 1 , this . logSeparator = "\n" , this . startTime = ( new Date ) . getTime ( ) , Object . assign ( this , e ) , this . log ( "" , `🔔${ this . name } , 开始!` ) } isNode ( ) { return "undefined" != typeof module && ! ! module . exports } isQuanX ( ) { return "undefined" != typeof $task } isSurge ( ) { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon ( ) { return "undefined" != typeof $loon } toObj ( t , e = null ) { try { return JSON . parse ( t ) } catch { return e } } toStr ( t , e = null ) { try { return JSON . stringify ( t ) } catch { return e } } getjson ( t , e ) { let s = e ; const i = this . getdata ( t ) ; if ( i ) try { s = JSON . parse ( this . getdata ( t ) ) } catch { } return s } setjson ( t , e ) { try { return this . setdata ( JSON . stringify ( t ) , e ) } catch { return ! 1 } } getScript ( t ) { return new Promise ( e => { this . get ( { url :t } , ( t , s , i ) => e ( i ) ) } ) } runScript ( t , e ) { return new Promise ( s => { let i = this . getdata ( "@chavy_boxjs_userCfgs.httpapi" ) ; i = i ?i . replace ( / \n / g, "" ) . trim ( ) :i ; let r = this . getdata ( "@chavy_boxjs_userCfgs.httpapi_timeout" ) ; r = r ?1 * r :20 , r = e && e . timeout ?e . timeout :r ; const [ o , h ] = i . split ( "@" ) , n = { url :`http://${ h } /v1/scripting/evaluate` , body :{ script_text :t , mock_type :"cron" , timeout :r } , headers :{ "X-Key" :o , Accept :"*/*" } } ; this . post ( n , ( t , e , i ) => s ( i ) ) } ) . catch ( t => this . logErr ( t ) ) } loaddata ( ) { if ( ! this . isNode ( ) ) return { } ; { this . fs = this . fs ?this . fs :require ( "fs" ) , this . path = this . path ?this . path :require ( "path" ) ; const t = this . path . resolve ( this . dataFile ) , e = this . path . resolve ( process . cwd ( ) , this . dataFile ) , s = this . fs . existsSync ( t ) , i = ! s && this . fs . existsSync ( e ) ; if ( ! s && ! i ) return { } ; { const i = s ?t :e ; try { return JSON . parse ( this . fs . readFileSync ( i ) ) } catch ( t ) { return { } } } } } writedata ( ) { if ( this . isNode ( ) ) { this . fs = this . fs ?this . fs :require ( "fs" ) , this . path = this . path ?this . path :require ( "path" ) ; const t = this . path . resolve ( this . dataFile ) , e = this . path . resolve ( process . cwd ( ) , this . dataFile ) , s = this . fs . existsSync ( t ) , i = ! s && this . fs . existsSync ( e ) , r = JSON . stringify ( this . data ) ; s ?this . fs . writeFileSync ( t , r ) :i ?this . fs . writeFileSync ( e , r ) :this . fs . writeFileSync ( t , r ) } } lodash_get ( t , e , s ) { const i = e . replace ( / \[ ( \d + ) \] / g, ".$1" ) . split ( "." ) ; let r = t ; for ( const t of i ) if ( r = Object ( r ) [ t ] , void 0 === r ) return s ; return r } lodash_set ( t , e , s ) { return Object ( t ) !== t ?t :( Array . isArray ( e ) || ( e = e . toString ( ) . match ( / [ ^ . [ \] ] + / g) || [ ] ) , e . slice ( 0 , - 1 ) . reduce ( ( t , s , i ) => Object ( t [ s ] ) === t [ s ] ?t [ s ] :t [ s ] = Math . abs ( e [ i + 1 ] ) >> 0 == + e [ i + 1 ] ?[ ] :{ } , t ) [ e [ e . length - 1 ] ] = s , t ) } getdata ( t ) { let e = this . getval ( t ) ; if ( / ^ @ / . test ( t ) ) { const [ , s , i ] = / ^ @ ( .* ?) \. ( .* ?) $ / . exec ( t ) , r = s ?this . getval ( s ) :"" ; if ( r ) try { const t = JSON . parse ( r ) ; e = t ?this . lodash_get ( t , i , "" ) :e } catch ( t ) { e = "" } } return e } setdata ( t , e ) { let s = ! 1 ; if ( / ^ @ / . test ( e ) ) { const [ , i , r ] = / ^ @ ( .* ?) \. ( .* ?) $ / . exec ( e ) , o = this . getval ( i ) , h = i ?"null" === o ?null :o || "{}" :"{}" ; try { const e = JSON . parse ( h ) ; this . lodash_set ( e , r , t ) , s = this . setval ( JSON . stringify ( e ) , i ) } catch ( e ) { const o = { } ; this . lodash_set ( o , r , t ) , s = this . setval ( JSON . stringify ( o ) , i ) } } else s = this . setval ( t , e ) ; return s } getval ( t ) { return this . isSurge ( ) || this . isLoon ( ) ?$persistentStore . read ( t ) :this . isQuanX ( ) ?$prefs . valueForKey ( t ) :this . isNode ( ) ?( this . data = this . loaddata ( ) , this . data [ t ] ) :this . data && this . data [ t ] || null } setval ( t , e ) { return this . isSurge ( ) || this . isLoon ( ) ?$persistentStore . write ( t , e ) :this . isQuanX ( ) ?$prefs . setValueForKey ( t , e ) :this . isNode ( ) ?( this . data = this . loaddata ( ) , this . data [ e ] = t , this . writedata ( ) , ! 0 ) :this . data && this . data [ e ] || null } initGotEnv ( t ) { this . got = this . got ?this . got :require ( "got" ) , this . cktough = this . cktough ?this . cktough :require ( "tough-cookie" ) , this . ckjar = this . ckjar ?this . ckjar :new this . cktough . CookieJar , t && ( t . headers = t . headers ?t . headers :{ } , void 0 === t . headers . Cookie && void 0 === t . cookieJar && ( t . cookieJar = this . ckjar ) ) } get ( t , e = ( ( ) => { } ) ) { t . headers && ( delete t . headers [ "Content-Type" ] , delete t . headers [ "Content-Length" ] ) , this . isSurge ( ) || this . isLoon ( ) ?( this . isSurge ( ) && this . isNeedRewrite && ( t . headers = t . headers || { } , Object . assign ( t . headers , { "X-Surge-Skip-Scripting" :! 1 } ) ) , $httpClient . get ( t , ( t , s , i ) => { ! t && s && ( s . body = i , s . statusCode = s . status ) , e ( t , s , i ) } ) ) :this . isQuanX ( ) ?( this . isNeedRewrite && ( t . opts = t . opts || { } , Object . assign ( t . opts , { hints :! 1 } ) ) , $task . fetch ( t ) . then ( t => { const { statusCode :s , statusCode :i , headers :r , body :o } = t ; e ( null , { status :s , statusCode :i , headers :r , body :o } , o ) } , t => e ( t ) ) ) :this . isNode ( ) && ( this . initGotEnv ( t ) , this . got ( t ) . on ( "redirect" , ( t , e ) => { try { if ( t . headers [ "set-cookie" ] ) { const s = t . headers [ "set-cookie" ] . map ( this . cktough . Cookie . parse ) . toString ( ) ; s && this . ckjar . setCookieSync ( s , null ) , e . cookieJar = this . ckjar } } catch ( t ) { this . logErr ( t ) } } ) . then ( t => { const { statusCode :s , statusCode :i , headers :r , body :o } = t ; e ( null , { status :s , statusCode :i , headers :r , body :o } , o ) } , t => { const { message :s , response :i } = t ; e ( s , i , i && i . body ) } ) ) } post ( t , e = ( ( ) => { } ) ) { if ( t . body && t . headers && ! t . headers [ "Content-Type" ] && ( t . headers [ "Content-Type" ] = "application/x-www-form-urlencoded" ) , t . headers && delete t . headers [ "Content-Length" ] , this . isSurge ( ) || this . isLoon ( ) ) this . isSurge ( ) && this . isNeedRewrite && ( t . headers = t . headers || { } , Object . assign ( t . headers , { "X-Surge-Skip-Scripting" :! 1 } ) ) , $httpClient . post ( t , ( t , s , i ) => { ! t && s && ( s . body = i , s . statusCode = s . status ) , e ( t , s , i ) } ) ; else if ( this . isQuanX ( ) ) t . method = "POST" , this . isNeedRewrite && ( t . opts = t . opts || { } , Object . assign ( t . opts , { hints :! 1 } ) ) , $task . fetch ( t ) . then ( t => { const { statusCode :s , statusCode :i , headers :r , body :o } = t ; e ( null , { status :s , statusCode :i , headers :r , body :o } , o ) } , t => e ( t ) ) ; else if ( this . isNode ( ) ) { this . initGotEnv ( t ) ; const { url :s , ...i } = t ; this . got . post ( s , i ) . then ( t => { const { statusCode :s , statusCode :i , headers :r , body :o } = t ; e ( null , { status :s , statusCode :i , headers :r , body :o } , o ) } , t => { const { message :s , response :i } = t ; e ( s , i , i && i . body ) } ) } } time ( t , e = null ) { const s = e ?new Date ( e ) :new Date ; let i = { "M+" :s . getMonth ( ) + 1 , "d+" :s . getDate ( ) , "H+" :s . getHours ( ) , "m+" :s . getMinutes ( ) , "s+" :s . getSeconds ( ) , "q+" :Math . floor ( ( s . getMonth ( ) + 3 ) / 3 ) , S :s . getMilliseconds ( ) } ; / ( y + ) / . test ( t ) && ( t = t . replace ( RegExp . $1 , ( s . getFullYear ( ) + "" ) . substr ( 4 - RegExp . $1 . length ) ) ) ; for ( let e in i ) new RegExp ( "(" + e + ")" ) . test ( t ) && ( t = t . replace ( RegExp . $1 , 1 == RegExp . $1 . length ?i [ e ] :( "00" + i [ e ] ) . substr ( ( "" + i [ e ] ) . length ) ) ) ; return t } msg ( e = t , s = "" , i = "" , r ) { const o = t => { if ( ! t ) return t ; if ( "string" == typeof t ) return this . isLoon ( ) ?t :this . isQuanX ( ) ?{ "open-url" :t } :this . isSurge ( ) ?{ url :t } :void 0 ; if ( "object" == typeof t ) { if ( this . isLoon ( ) ) { let e = t . openUrl || t . url || t [ "open-url" ] , s = t . mediaUrl || t [ "media-url" ] ; return { openUrl :e , mediaUrl :s } } if ( this . isQuanX ( ) ) { let e = t [ "open-url" ] || t . url || t . openUrl , s = t [ "media-url" ] || t . mediaUrl ; return { "open-url" :e , "media-url" :s } } if ( this . isSurge ( ) ) { let e = t . url || t . openUrl || t [ "open-url" ] ; return { url :e } } } } ; if ( this . isMute || ( this . isSurge ( ) || this . isLoon ( ) ?$notification . post ( e , s , i , o ( r ) ) :this . isQuanX ( ) && $notify ( e , s , i , o ( r ) ) ) , ! this . isMuteLog ) { let t = [ "" , "==============📣系统通知📣==============" ] ; t . push ( e ) , s && t . push ( s ) , i && t . push ( i ) , console . log ( t . join ( "\n" ) ) , this . logs = this . logs . concat ( t ) } } log ( ...t ) { t . length > 0 && ( this . logs = [ ...this . logs , ...t ] ) , console . log ( t . join ( this . logSeparator ) ) } logErr ( t , e ) { const s = ! this . isSurge ( ) && ! this . isQuanX ( ) && ! this . isLoon ( ) ; s ?this . log ( "" , `❗️${ this . name } , 错误!` , t . stack ) :this . log ( "" , `❗️${ this . name } , 错误!` , t ) } wait ( t ) { return new Promise ( e => setTimeout ( e , t ) ) } done ( t = { } ) { const e = ( new Date ) . getTime ( ) , s = ( e - this . startTime ) / 1e3 ; this . log ( "" , `🔔${ this . name } , 结束! 🕛 ${ s } 秒` ) , this . log ( ) , ( this . isSurge ( ) || this . isQuanX ( ) || this . isLoon ( ) ) && $done ( t ) } } ( t , e ) }
0 commit comments