├── .idea ├── .gitignore ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── encodings.xml ├── jd_job.iml ├── misc.xml ├── modules.xml └── vcs.xml ├── CK_WxPusherUid.json ├── DreamFactoryShareCodes.js ├── Env.min.js ├── FactoryShareCodes.js ├── JDCookies.txt ├── JDJRValidator.js ├── JDJRValidator_Aaron.js ├── JDJRValidator_Pure.js ├── JDJRValidator_Pure_Smiek.js ├── JDSignValidator.js ├── JD_DailyBonus.js ├── JS_USER_AGENTS.js ├── MoveMentFaker.js ├── QLOneKeyDependency.sh ├── README.md ├── TS_USER_AGENTS.js ├── USER_AGENTS.js ├── ZooFaker_Necklace.js ├── all ├── del_kww.py ├── jd_dfcf.js ├── jd_ksjsb.js ├── jd_kww.js ├── jd_wx_hyyd.js └── jd_wxyd.py ├── backUp ├── del_618red.js ├── del_Coupon.js ├── del_SpeedUp.js ├── del_angryKoii.js ├── del_bean_change_pro.js ├── del_bean_change_xh.js ├── del_big_winner_Mod.js ├── del_blueCoin.js ├── del_dpqd_diy.js ├── del_fcffl.js ├── del_homeRain.js ├── del_jdfactory.js ├── del_jin_tie.js ├── del_joy.js ├── del_joy_feedPet.js ├── del_jxmc_zl.js ├── del_kanjia.js ├── del_market_lottery.js ├── del_mhtask.js ├── del_moneyTree.js ├── del_nnfls.js ├── del_redrain_half.js ├── del_sgmh.js ├── del_shop.js ├── del_superBrandJK.js ├── del_superBrandStar.js ├── del_tyt.js ├── del_tyt_ks.js └── del_wish.js ├── crontab_list.sh ├── docs ├── GXJL.md ├── JD2.2.md ├── QLOneKeyDependency.sh ├── ZLPZ.md ├── _config.yml ├── assets │ ├── img │ │ ├── img_1.png │ │ ├── img_2.png │ │ ├── img_3.png │ │ ├── img_4.png │ │ └── img_5.png │ └── js │ │ ├── 30.json │ │ ├── cityShareCodes.json │ │ ├── dyj.json │ │ ├── jxhb.json │ │ ├── mall_active.json │ │ ├── qjd.json │ │ └── updateBeanHome.json ├── dyj.json ├── fcwb.json ├── index.md ├── jd_shopid.txt ├── jdwxx.json ├── jsdelivr │ ├── codemirror.min.js │ ├── darkreader.min.js │ ├── javascript.js │ ├── python.js │ ├── react-dom.production.min.js │ ├── shell.js │ ├── sockjs.min.js │ └── umi.8e15ef06.js ├── ks.json ├── ksjsb.json ├── ksjsbjk.json ├── tiger.json ├── update.json ├── version.json ├── wbzl.json ├── wish.json ├── wskey.txt ├── zdfd_all.json └── zqkd │ ├── Backup │ ├── zq_cron.json │ └── zqcx.json │ ├── md5.js │ ├── zq_Adv_video.js │ ├── zq_Rotary.js │ ├── zq_box.js │ ├── zq_double.js │ ├── zq_friendSign.js │ ├── zq_kkz.js │ ├── zq_llz.js │ ├── zq_qd.js │ ├── zq_share.js │ ├── zq_sj.js │ ├── zq_ssz.js │ ├── zq_today_score.js │ ├── zq_wakeup.js │ ├── zq_withdraw.js │ └── zq_wz.js ├── function ├── JDJRValidator_Pure_smiek.js ├── TS_USER_AGENTS.ts ├── cache │ └── index.js ├── common.js ├── config.js ├── dylant.js ├── dylanx.js ├── dylany.js ├── dylanz.js ├── eval.js ├── getToken.js ├── h5st.ts ├── jdValidate.js ├── jdcookie.js ├── jinli_log.ts ├── jxAlgo.js ├── krgetSign.js ├── krgetToken.js ├── krh5st.js ├── magic.js ├── ql.js ├── sendNotify.js ├── sign_graphics_validate.js ├── signdps.js └── zjdtool.js ├── install-node.sh ├── jd ├── JD_DailyBonus.js ├── del_SendBean.js ├── del_couponspace.js ├── del_daily_lottery.js ├── del_joy_park_task.js ├── del_joypark_task.js ├── del_marketmh.js ├── del_pigPet.js ├── del_speed_signA.js ├── del_speed_signB.js ├── del_try.js ├── del_try_dl.js ├── jd_618.js ├── jd_FactoryShareCodes.js ├── jd_JRValidator_Pure.js ├── jd_TreasureRank.js ├── jd_bean_change.js ├── jd_bean_change_nm.js ├── jd_bean_change_pro.js ├── jd_bean_home.js ├── jd_bean_info.js ├── jd_bean_sign.js ├── jd_beauty.js ├── jd_cash.js ├── jd_cash_exchange.js ├── jd_cash_nolan.js ├── jd_cash_wx.js ├── jd_cfd.js ├── jd_ckcheck.js ├── jd_cleancart.js ├── jd_cleancart_nolan.js ├── jd_club_lottery.js ├── jd_code2url.js ├── jd_comment.js ├── jd_couponspace.js ├── jd_ddly.js ├── jd_ddnc_farmpark.js ├── jd_dreamFactoryy.js ├── jd_dwapp.js ├── jd_ffl.js ├── jd_fruit_friend.js ├── jd_fruit_task.js ├── jd_fruit_zl.js ├── jd_get_share_code.js ├── jd_gold_creation.js ├── jd_health.js ├── jd_health_collect.js ├── jd_insight.js ├── jd_jdzz.js ├── jd_joy_tx.js ├── jd_jsbzjd.js ├── jd_jxsign.js ├── jd_kanjia.js ├── jd_kd.js ├── jd_mdou.js ├── jd_mohe_help.js ├── jd_morningSc.js ├── jd_pay_contract.js ├── jd_plantBean.js ├── jd_plantBean_help.js ├── jd_plus2bean.js ├── jd_price.js ├── jd_priceProtectMo.js ├── jd_productZ4BrandZ.js ├── jd_redrain_half.js ├── jd_sevenDay.js ├── jd_shangou.js ├── jd_sign_graphics1.js ├── jd_speed.js ├── jd_speed_sign_new.js ├── jd_speed_signfree.js ├── jd_supergz.js ├── jd_unsubscribe.js ├── jd_vipgrowth.js ├── jd_wish.js ├── jd_wywcj.js └── jd_yqyll.js ├── jdCookie.js ├── jdCookieZkl.js ├── jdDreamFactoryShareCodes.js ├── jdFactoryShareCodes.js ├── jdFruitShareCodes.js ├── jdJxncShareCodes.js ├── jdPetShareCodes.js ├── jdPlantBeanShareCodes.js ├── jdShareCodes.js ├── jdZooFaker_Necklace.js ├── jdgraphics_validate.js ├── jm ├── jd_20zn.js ├── jd_618_Red.js ├── jd_fruit_zldl.js ├── jd_js_sign.js ├── jd_sk.js ├── jd_washbeans.js └── sign_graphics_validate.js ├── ms ├── del_618red.js ├── del_ftmtqgA.js ├── del_xmscqj.js ├── del_yhq_2.js ├── del_yhq_29.js ├── jd_mtyy.js └── jd_wwspT11.js ├── py ├── del_Evaluation.py ├── del_bigwinner.py ├── del_fcwb.py ├── del_lxj.py ├── del_qjd.py ├── jd_OpenCard_T.py ├── jd_delete.py ├── jd_fcwb.py ├── jd_getFollowGift.py ├── jd_hbtj.py ├── jd_health_exchange.py ├── jd_prodev.py ├── jd_pzhb_notify.py ├── jd_try_notify.py ├── jd_wskey.py ├── jd_wskeyVIP.py ├── jd_yqhy.py └── jd_zqfl.py ├── ql.js ├── ql212796668.js ├── ql_jlhb_log.js ├── scripts_jd_live.js ├── sendNotify.js ├── sendNotify.py ├── sign_graphics_validate.js ├── ts ├── TS_USER_AGENTS.ts ├── jd_joy_park_run.ts ├── package-lock.json └── package.json └── utils ├── DreamFactoryShareCodes.js ├── FactoryShareCodes.js ├── JDJRValidator.js ├── JDJRValidator_Pure.js ├── JD_DailyBonus.js ├── MoveMentFaker.js ├── PetShareCodes.js ├── USER_AGENTS.js ├── ZooFaker_Necklace.js ├── common.js ├── config.js ├── eval.js ├── jdPlantBeanShareCodes.js ├── jdShareCodes.js ├── jdValidate.js ├── jdcookie.js ├── jinli_log.ts ├── jxAlgo.js ├── magic.js ├── sendjxmcToken.js ├── share_code.js └── sign_graphics_validate.js /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Datasource local storage ignored files 5 | /../../../../../:\tang\Git\jd_job\.idea/dataSources/ 6 | /dataSources.local.xml 7 | # Editor-based HTTP Client requests 8 | /httpRequests/ 9 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/jd_job.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /CK_WxPusherUid.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pt_pin": "ptpin1", 4 | "Uid": "UID_AAAAAAAAAAAA" 5 | }, 6 | { 7 | "pt_pin": "ptpin2", 8 | "Uid": "UID_BBBBBBBBBB" 9 | }, 10 | { 11 | "pt_pin": "ptpin3", 12 | "Uid": "UID_CCCCCCCCC" 13 | } 14 | ] -------------------------------------------------------------------------------- /DreamFactoryShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 京喜工厂互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let shareCodes = [ 10 | 'AXDgNYKNLs51h24hm7ZK-w==@2pMYXE95BIkCIGcO6UzTpQ==@DgHnSIl_Xks49TJjxzo7nw==@UO68abNzUTGatLzR4Z4RTg==@xJctChTp3ru2blH_WwFopg==@W2y011egxw55xNDYP8Xpww==@NRjbnfYENRVL9QSnLZZNrA==@dmgVOhr4JdUp1CG78ohkWw==@6nURqZ5tze71d9TbZGQg3Q==',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | 'AXDgNYKNLs51h24hm7ZK-w==@2pMYXE95BIkCIGcO6UzTpQ==@DgHnSIl_Xks49TJjxzo7nw==@UO68abNzUTGatLzR4Z4RTg==@xJctChTp3ru2blH_WwFopg==@W2y011egxw55xNDYP8Xpww==@NRjbnfYENRVL9QSnLZZNrA==@dmgVOhr4JdUp1CG78ohkWw==@6nURqZ5tze71d9TbZGQg3Q==',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | 14 | // 从日志获取互助码 15 | // const logShareCodes = require('./utils/jdShareCodes'); 16 | // if (logShareCodes.DREAM_FACTORY_SHARE_CODES.length > 0 && !process.env.DREAM_FACTORY_SHARE_CODES) { 17 | // process.env.DREAM_FACTORY_SHARE_CODES = logShareCodes.DREAM_FACTORY_SHARE_CODES.join('&'); 18 | // } 19 | 20 | // 判断环境变量里面是否有京喜工厂互助码 21 | if (process.env.DREAM_FACTORY_SHARE_CODES) { 22 | if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('&') > -1) { 23 | console.log(`您的互助码选择的是用&隔开\n`) 24 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('&'); 25 | } else if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('\n') > -1) { 26 | console.log(`您的互助码选择的是用换行隔开\n`) 27 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('\n'); 28 | } else { 29 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split(); 30 | } 31 | } else { 32 | console.log(`由于您环境变量(DREAM_FACTORY_SHARE_CODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 33 | } 34 | for (let i = 0; i < shareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['shareCodes' + index] = shareCodes[i]; 37 | } 38 | -------------------------------------------------------------------------------- /Env.min.js: -------------------------------------------------------------------------------- 1 | function Env(t,e){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,o)=>{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.logSeparator="\n",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}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 o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"}};this.post(a,(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),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}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),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),h=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),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()?$httpClient.get(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)}):this.isQuanX()?$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)):this.isNode()&&(this.initGotEnv(t),this.got(t).on("redirect",(t,e)=>{try{const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t)))}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())$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",$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},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:o,body:r}=t;e(null,{status:s,statusCode:i,headers:o,body:r},r)},t=>e(t))}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",o){const r=t=>{if(!t||!this.isLoon()&&this.isSurge())return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,r(o)):this.isQuanX()&&$notify(e,s,i,r(o)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}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("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} -------------------------------------------------------------------------------- /FactoryShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 东东工厂互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let shareCodes = [ 10 | '',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | '',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | 14 | // 从日志获取互助码 15 | // const logShareCodes = require('./utils/jdShareCodes'); 16 | // if (logShareCodes.DDFACTORY_SHARECODES.length > 0 && !process.env.DDFACTORY_SHARECODES) { 17 | // process.env.DDFACTORY_SHARECODES = logShareCodes.DDFACTORY_SHARECODES.join('&'); 18 | // } 19 | 20 | // 判断环境变量里面是否有东东工厂互助码 21 | if (process.env.DDFACTORY_SHARECODES) { 22 | if (process.env.DDFACTORY_SHARECODES.indexOf('&') > -1) { 23 | console.log(`您的互助码选择的是用&隔开\n`) 24 | shareCodes = process.env.DDFACTORY_SHARECODES.split('&'); 25 | } else if (process.env.DDFACTORY_SHARECODES.indexOf('\n') > -1) { 26 | console.log(`您的互助码选择的是用换行隔开\n`) 27 | shareCodes = process.env.DDFACTORY_SHARECODES.split('\n'); 28 | } else { 29 | shareCodes = process.env.DDFACTORY_SHARECODES.split(); 30 | } 31 | } else { 32 | console.log(`由于您环境变量(DDFACTORY_SHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 33 | } 34 | for (let i = 0; i < shareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['shareCodes' + index] = shareCodes[i]; 37 | } -------------------------------------------------------------------------------- /JDCookies.txt: -------------------------------------------------------------------------------- 1 | #多账号换行,以下示例:(通过正则获取此文件的ck,理论上可以自定义名字标记ck,也可以随意摆放ck) 2 | 账号1【Curtinlv】cookie1; 3 | 账号2【TopStyle】cookie2; -------------------------------------------------------------------------------- /MoveMentFaker.js: -------------------------------------------------------------------------------- 1 | const https = require('https'); 2 | const fs = require('fs/promises'); 3 | const { R_OK } = require('fs').constants; 4 | const vm = require('vm'); 5 | const UA = require('../USER_AGENTS.js').USER_AGENT; 6 | 7 | const URL = 'https://wbbny.m.jd.com/babelDiy/Zeus/2rtpffK8wqNyPBH6wyUDuBKoAbCt/index.html'; 8 | // const REG_MODULE = /(\d+)\:function\(.*(?=smashUtils\.get_risk_result)/gm; 9 | const SYNTAX_MODULE = '!function(n){var r={};function o(e){if(r[e])'; 10 | const REG_SCRIPT = /`, options); 180 | await $.wait(1000) 181 | try { 182 | feSt = 's' 183 | jab = new $.dom.window.JAB({ 184 | bizId: 'jdjiabao', 185 | initCaptcha: false 186 | }) 187 | $.token = jab.getToken() 188 | } catch (e) {} 189 | } 190 | -------------------------------------------------------------------------------- /jdCookie.js: -------------------------------------------------------------------------------- 1 | /* 2 | ================================================================================ 3 | 魔改自 https://github.com/shufflewzc/faker2/blob/main/jdCookie.js 4 | 修改内容:与task_before.sh配合,由task_before.sh设置要设置要做互助的活动的 ShareCodeConfigName 和 ShareCodeEnvName 环境变量, 5 | 然后在这里实际解析/ql/log/.ShareCode中该活动对应的配置信息(由code.sh生成和维护),注入到nodejs的环境变量中 6 | 修改原因:原先的task_before.sh直接将互助信息注入到shell的env中,在ck超过45以上时,互助码环境变量过大会导致调用一些系统命令 7 | (如date/cat)时报 Argument list too long,而在node中修改环境变量不会受这个限制,也不会影响外部shell环境,确保脚本可以正常运行 8 | 魔改作者:风之凌殇 9 | ================================================================================ 10 | 11 | 此文件为Node.js专用。其他用户请忽略 12 | */ 13 | //此处填写京东账号cookie。 14 | let CookieJDs = [ 15 | ] 16 | // 判断环境变量里面是否有京东ck 17 | if (process.env.JD_COOKIE) { 18 | if (process.env.JD_COOKIE.indexOf('&') > -1) { 19 | CookieJDs = process.env.JD_COOKIE.split('&'); 20 | } else if (process.env.JD_COOKIE.indexOf('\n') > -1) { 21 | CookieJDs = process.env.JD_COOKIE.split('\n'); 22 | } else { 23 | CookieJDs = [process.env.JD_COOKIE]; 24 | } 25 | } 26 | if (JSON.stringify(process.env).indexOf('GITHUB')>-1) { 27 | console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`); 28 | !(async () => { 29 | await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`) 30 | await process.exit(0); 31 | })() 32 | } 33 | CookieJDs = [...new Set(CookieJDs.filter(item => !!item))] 34 | console.log(`\n====================共${CookieJDs.length}个京东账号Cookie=========\n`); 35 | console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString('zh', {hour12: false}).replace(' 24:',' 00:')}=====================\n`) 36 | if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; 37 | for (let i = 0; i < CookieJDs.length; i++) { 38 | if (!CookieJDs[i].match(/pt_pin=(.+?);/) || !CookieJDs[i].match(/pt_key=(.+?);/)) console.log(`\n提示:京东cookie 【${CookieJDs[i]}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`); 39 | const index = (i + 1 === 1) ? '' : (i + 1); 40 | exports['CookieJD' + index] = CookieJDs[i].trim(); 41 | } 42 | 43 | // 以下为注入互助码环境变量(仅nodejs内起效)的代码 44 | function SetShareCodesEnv(nameConfig = "", envName = "") { 45 | let rawCodeConfig = {} 46 | 47 | // 读取互助码 48 | shareCodeLogPath = `${process.env.QL_DIR}/log/.ShareCode/${nameConfig}.log` 49 | let fs = require('fs') 50 | if (fs.existsSync(shareCodeLogPath)) { 51 | // 因为faker2目前没有自带ini,改用已有的dotenv来解析 52 | // // 利用ini模块读取原始互助码和互助组信息 53 | // let ini = require('ini') 54 | // rawCodeConfig = ini.parse(fs.readFileSync(shareCodeLogPath, 'utf-8')) 55 | 56 | // 使用env模块 57 | require('dotenv').config({path: shareCodeLogPath}) 58 | rawCodeConfig = process.env 59 | } 60 | 61 | // 解析每个用户的互助码 62 | codes = {} 63 | Object.keys(rawCodeConfig).forEach(function (key) { 64 | if (key.startsWith(`My${nameConfig}`)) { 65 | codes[key] = rawCodeConfig[key] 66 | } 67 | }); 68 | 69 | // 解析每个用户要帮助的互助码组,将用户实际的互助码填充进去 70 | let helpOtherCodes = {} 71 | Object.keys(rawCodeConfig).forEach(function (key) { 72 | if (key.startsWith(`ForOther${nameConfig}`)) { 73 | helpCode = rawCodeConfig[key] 74 | for (const [codeEnv, codeVal] of Object.entries(codes)) { 75 | helpCode = helpCode.replace("${" + codeEnv + "}", codeVal) 76 | } 77 | 78 | helpOtherCodes[key] = helpCode 79 | } 80 | }); 81 | 82 | // 按顺序用&拼凑到一起,并放入环境变量,供目标脚本使用 83 | let shareCodes = [] 84 | let totalCodeCount = Object.keys(helpOtherCodes).length 85 | for (let idx = 1; idx <= totalCodeCount; idx++) { 86 | shareCodes.push(helpOtherCodes[`ForOther${nameConfig}${idx}`]) 87 | } 88 | let shareCodesStr = shareCodes.join('&') 89 | process.env[envName] = shareCodesStr 90 | 91 | console.info(`【JDWXX】 友情提示:为避免ck超过45以上时,互助码环境变量过大而导致调用一些系统命令(如date/cat)时报 Argument list too long,改为在nodejs中设置 ${nameConfig} 的 互助码环境变量 ${envName},共计 ${totalCodeCount} 组互助码,总大小为 ${shareCodesStr.length}`) 92 | } 93 | 94 | // 若在task_before.sh 中设置了要设置互助码环境变量的活动名称和环境变量名称信息,则在nodejs中处理,供活动使用 95 | let nameConfig = process.env.ShareCodeConfigName 96 | let envName = process.env.ShareCodeEnvName 97 | if (nameConfig && envName) { 98 | SetShareCodesEnv(nameConfig, envName) 99 | } else { 100 | console.debug(`JDWXX 友情提示:您的脚本正常运行中`)} -------------------------------------------------------------------------------- /jdCookieZkl.js: -------------------------------------------------------------------------------- 1 | /* 2 | 此文件为Node.js专用。其他用户请忽略 3 | */ 4 | //此处填写京东账号cookie。 5 | let CookieJDs = [ 6 | '',//账号一ck,例:pt_key=XXX;pt_pin=XXX; 7 | '',//账号二ck,例:pt_key=XXX;pt_pin=XXX;如有更多,依次类推 8 | ] 9 | // 判断环境变量里面是否有京东ck 10 | if (process.env.ZKLAPP) { 11 | if (process.env.ZKLAPP.indexOf('&') > -1) { 12 | CookieJDs = process.env.ZKLAPP.split('&'); 13 | } else if (process.env.ZKLAPP.indexOf('\n') > -1) { 14 | CookieJDs = process.env.ZKLAPP.split('\n'); 15 | } else { 16 | CookieJDs = [process.env.ZKLAPP]; 17 | } 18 | } 19 | if (JSON.stringify(process.env).indexOf('GITHUB')>-1) { 20 | console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`); 21 | !(async () => { 22 | await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`) 23 | await process.exit(0); 24 | })() 25 | } 26 | CookieJDs = [...new Set(CookieJDs.filter(item => !!item))] 27 | console.log(`\n====================共${CookieJDs.length}个真快乐APP账号=========\n`); 28 | console.log(`==================脚本执行- 北京时间(UTC+8):${new Date(new Date().getTime() + new Date().getTimezoneOffset()*60*1000 + 8*60*60*1000).toLocaleString()}=====================\n`) 29 | if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {}; 30 | for (let i = 0; i < CookieJDs.length; i++) { 31 | // if (!CookieJDs[i].match(/pt_pin=(.+?);/) || !CookieJDs[i].match(/pt_key=(.+?);/)) console.log(`\n提示:京东cookie 【${CookieJDs[i]}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`); 32 | const index = (i + 1 === 1) ? '' : (i + 1); 33 | exports['CookieJD' + index] = CookieJDs[i].trim(); 34 | } 35 | -------------------------------------------------------------------------------- /jdDreamFactoryShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 京喜工厂互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let shareCodes = [ 10 | '@',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | '@',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | 14 | // 从日志获取互助码 15 | // const logShareCodes = require('./utils/jdShareCodes'); 16 | // if (logShareCodes.DREAM_FACTORY_SHARE_CODES.length > 0 && !process.env.DREAM_FACTORY_SHARE_CODES) { 17 | // process.env.DREAM_FACTORY_SHARE_CODES = logShareCodes.DREAM_FACTORY_SHARE_CODES.join('&'); 18 | // } 19 | 20 | // 判断环境变量里面是否有京喜工厂互助码 21 | if (process.env.DREAM_FACTORY_SHARE_CODES) { 22 | if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('&') > -1) { 23 | console.log(`您的互助码选择的是用&隔开\n`) 24 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('&'); 25 | } else if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('\n') > -1) { 26 | console.log(`您的互助码选择的是用换行隔开\n`) 27 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('\n'); 28 | } else { 29 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split(); 30 | } 31 | } else { 32 | console.log(`去设置变量(DREAM_FACTORY_SHARE_CODES)不同好友中间用@符号隔开`) 33 | } 34 | for (let i = 0; i < shareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['shareCodes' + index] = shareCodes[i]; 37 | } 38 | -------------------------------------------------------------------------------- /jdFactoryShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 东东工厂互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let shareCodes = [ 10 | '',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | '',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | 14 | // 从日志获取互助码 15 | // const logShareCodes = require('./utils/jdShareCodes'); 16 | // if (logShareCodes.DDFACTORY_SHARECODES.length > 0 && !process.env.DDFACTORY_SHARECODES) { 17 | // process.env.DDFACTORY_SHARECODES = logShareCodes.DDFACTORY_SHARECODES.join('&'); 18 | // } 19 | 20 | // 判断环境变量里面是否有东东工厂互助码 21 | if (process.env.DDFACTORY_SHARECODES) { 22 | if (process.env.DDFACTORY_SHARECODES.indexOf('&') > -1) { 23 | console.log(`您的互助码选择的是用&隔开\n`) 24 | shareCodes = process.env.DDFACTORY_SHARECODES.split('&'); 25 | } else if (process.env.DDFACTORY_SHARECODES.indexOf('\n') > -1) { 26 | console.log(`您的互助码选择的是用换行隔开\n`) 27 | shareCodes = process.env.DDFACTORY_SHARECODES.split('\n'); 28 | } else { 29 | shareCodes = process.env.DDFACTORY_SHARECODES.split(); 30 | } 31 | } else { 32 | console.log(`由于您环境变量(DDFACTORY_SHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 33 | } 34 | for (let i = 0; i < shareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['shareCodes' + index] = shareCodes[i]; 37 | } -------------------------------------------------------------------------------- /jdFruitShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 东东农场互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写京东东农场的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let FruitShareCodes = [ 10 | '',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | '',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | 14 | // 从日志获取互助码 15 | // const logShareCodes = require('./utils/jdShareCodes'); 16 | // if (logShareCodes.FRUITSHARECODES.length > 0 && !process.env.FRUITSHARECODES) { 17 | // process.env.FRUITSHARECODES = logShareCodes.FRUITSHARECODES.join('&'); 18 | // } 19 | 20 | // 判断github action里面是否有东东农场互助码 21 | if (process.env.FRUITSHARECODES) { 22 | if (process.env.FRUITSHARECODES.indexOf('&') > -1) { 23 | console.log(`您的东东农场互助码选择的是用&隔开\n`) 24 | FruitShareCodes = process.env.FRUITSHARECODES.split('&'); 25 | } else if (process.env.FRUITSHARECODES.indexOf('\n') > -1) { 26 | console.log(`您的东东农场互助码选择的是用换行隔开\n`) 27 | FruitShareCodes = process.env.FRUITSHARECODES.split('\n'); 28 | } else { 29 | FruitShareCodes = process.env.FRUITSHARECODES.split(); 30 | } 31 | } else { 32 | console.log(`由于您环境变量(FRUITSHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 33 | } 34 | for (let i = 0; i < FruitShareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['FruitShareCode' + index] = FruitShareCodes[i]; 37 | } -------------------------------------------------------------------------------- /jdJxncShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 京喜农场助力码 3 | 此助力码要求种子 active 相同才能助力,多个账号的话可以种植同样的种子,如果种子不同的话,会自动跳过使用云端助力 4 | 此文件为Node.js专用。其他用户请忽略 5 | 支持京东N个账号 6 | */ 7 | //云服务器腾讯云函数等NOde.js用户在此处填写京京喜农场的好友码。 8 | // 同一个京东账号的好友助力码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 9 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 10 | // 注意:京喜农场 种植种子发生变化的时候,互助码也会变!! 11 | // 注意:京喜农场 种植种子发生变化的时候,互助码也会变!! 12 | // 注意:京喜农场 种植种子发生变化的时候,互助码也会变!! 13 | // 每个账号 shareCdoe 是一个 json,示例如下 14 | // {"smp":"22bdadsfaadsfadse8a","active":"jdnc_1_btorange210113_2","joinnum":"1"} 15 | let JxncShareCodes = [ 16 | '',//账号一的好友shareCode,不同好友中间用@符号隔开 17 | '',//账号二的好友shareCode,不同好友中间用@符号隔开 18 | ] 19 | // 判断github action里面是否有京喜农场助力码 20 | if (process.env.JXNC_SHARECODES) { 21 | if (process.env.JXNC_SHARECODES.indexOf('&') > -1) { 22 | console.log(`您的京喜农场助力码选择的是用&隔开\n`) 23 | JxncShareCodes = process.env.JXNC_SHARECODES.split('&'); 24 | } else if (process.env.JXNC_SHARECODES.indexOf('\n') > -1) { 25 | console.log(`您的京喜农场助力码选择的是用换行隔开\n`) 26 | JxncShareCodes = process.env.JXNC_SHARECODES.split('\n'); 27 | } else { 28 | JxncShareCodes = process.env.JXNC_SHARECODES.split(); 29 | } 30 | } else { 31 | console.log(`由于您环境变量里面(JXNC_SHARECODES)未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 32 | } 33 | JxncShareCodes = JxncShareCodes.filter(item => !!item); 34 | for (let i = 0; i < JxncShareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['JxncShareCode' + index] = JxncShareCodes[i]; 37 | } -------------------------------------------------------------------------------- /jdPetShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 东东萌宠互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let JdPetShareCodes = [] 10 | 11 | // 从日志获取互助码 12 | // const logShareCodes = require('./utils/jdShareCodes'); 13 | // if (logShareCodes.PETSHARECODES.length > 0 && !process.env.PETSHARECODES) { 14 | // process.env.PETSHARECODES = logShareCodes.PETSHARECODES.join('&'); 15 | // } 16 | 17 | // 判断github action里面是否有东东萌宠互助码 18 | if (process.env.PETSHARECODES) { 19 | if (process.env.PETSHARECODES.indexOf('&') > -1) { 20 | console.log(`您的东东萌宠互助码选择的是用&隔开\n`) 21 | JdPetShareCodes = process.env.PETSHARECODES.split('&'); 22 | } else if (process.env.PETSHARECODES.indexOf('\n') > -1) { 23 | console.log(`您的东东萌宠互助码选择的是用换行隔开\n`) 24 | JdPetShareCodes = process.env.PETSHARECODES.split('\n'); 25 | } else { 26 | JdPetShareCodes = process.env.PETSHARECODES.split(); 27 | } 28 | } else { 29 | console.log(`由于您环境变量(PETSHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 30 | } 31 | for (let i = 0; i < JdPetShareCodes.length; i++) { 32 | const index = (i + 1 === 1) ? '' : (i + 1); 33 | exports['PetShareCode' + index] = JdPetShareCodes[i]; 34 | } -------------------------------------------------------------------------------- /jdPlantBeanShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 京东种豆得豆互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let PlantBeanShareCodes = [ 10 | '@',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | '@',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | // 14 | // if (process.env.PlantBeanShareCodes) { 15 | // PlantBeanShareCodes = process.env.PlantBeanShareCodes; 16 | // } 17 | 18 | // 从日志获取互助码 19 | // const logShareCodes = require('./utils/jdShareCodes'); 20 | // if (logShareCodes.PLANT_BEAN_SHARECODES.length > 0 && !process.env.PLANT_BEAN_SHARECODES) { 21 | // process.env.PLANT_BEAN_SHARECODES = logShareCodes.PLANT_BEAN_SHARECODES.join('&'); 22 | // } 23 | 24 | // 判断github action里面是否有种豆得豆互助码 25 | if (process.env.PLANT_BEAN_SHARECODES) { 26 | if (process.env.PLANT_BEAN_SHARECODES.indexOf('&') > -1) { 27 | console.log(`您的种豆互助码选择的是用&隔开\n`) 28 | PlantBeanShareCodes = process.env.PLANT_BEAN_SHARECODES.split('&'); 29 | } else if (process.env.PLANT_BEAN_SHARECODES.indexOf('\n') > -1) { 30 | console.log(`您的种豆互助码选择的是用换行隔开\n`) 31 | PlantBeanShareCodes = process.env.PLANT_BEAN_SHARECODES.split('\n'); 32 | } else { 33 | PlantBeanShareCodes = process.env.PLANT_BEAN_SHARECODES.split(); 34 | } 35 | } else { 36 | console.log(`去设置变量(PLANT_BEAN_SHARECODES)不同好友中间用@符号隔开`) 37 | } 38 | for (let i = 0; i < PlantBeanShareCodes.length; i++) { 39 | const index = (i + 1 === 1) ? '' : (i + 1); 40 | exports['PlantBeanShareCodes' + index] = PlantBeanShareCodes[i]; 41 | } 42 | -------------------------------------------------------------------------------- /jdShareCodes.js: -------------------------------------------------------------------------------- 1 | // 从日志中获取互助码 2 | 3 | // process.env.SHARE_CODE_FILE = "/scripts/logs/sharecode.log"; 4 | // process.env.JD_COOKIE = "cookie1&cookie2"; 5 | 6 | exports.JDZZ_SHARECODES = []; 7 | exports.DDFACTORY_SHARECODES = []; 8 | exports.DREAM_FACTORY_SHARE_CODES = []; 9 | exports.PLANT_BEAN_SHARECODES = []; 10 | exports.FRUITSHARECODES = []; 11 | exports.PETSHARECODES = []; 12 | exports.JDJOY_SHARECODES = []; 13 | 14 | let fileContent = ''; 15 | if (process.env.SHARE_CODE_FILE) { 16 | try { 17 | const fs = require('fs'); 18 | if (fs.existsSync(process.env.SHARE_CODE_FILE)) fileContent = fs.readFileSync(process.env.SHARE_CODE_FILE, 'utf8'); 19 | } catch (err) { 20 | console.error(err) 21 | } 22 | } 23 | let lines = fileContent.split('\n'); 24 | 25 | let shareCodesMap = { 26 | "JDZZ_SHARECODES": [], 27 | "DDFACTORY_SHARECODES": [], 28 | "DREAM_FACTORY_SHARE_CODES": [], 29 | "PLANT_BEAN_SHARECODES": [], 30 | "FRUITSHARECODES": [], 31 | "PETSHARECODES": [], 32 | "JDJOY_SHARECODES": [], 33 | }; 34 | for (let i = 0; i < lines.length; i++) { 35 | if (lines[i].includes('京东赚赚')) { 36 | shareCodesMap.JDZZ_SHARECODES.push(lines[i].split('】')[1].trim()); 37 | } else if (lines[i].includes('东东工厂')) { 38 | shareCodesMap.DDFACTORY_SHARECODES.push(lines[i].split('】')[1].trim()); 39 | } else if (lines[i].includes('京喜工厂')) { 40 | shareCodesMap.DREAM_FACTORY_SHARE_CODES.push(lines[i].split('】')[1].trim()); 41 | } else if (lines[i].includes('京东种豆得豆')) { 42 | shareCodesMap.PLANT_BEAN_SHARECODES.push(lines[i].split('】')[1].trim()); 43 | } else if (lines[i].includes('东东农场')) { 44 | shareCodesMap.FRUITSHARECODES.push(lines[i].split('】')[1].trim()); 45 | } else if (lines[i].includes('东东萌宠')) { 46 | shareCodesMap.PETSHARECODES.push(lines[i].split('】')[1].trim()); 47 | } else if (lines[i].includes('crazyJoy')) { 48 | shareCodesMap.JDJOY_SHARECODES.push(lines[i].split('】')[1].trim()); 49 | } 50 | } 51 | for (let key in shareCodesMap) { 52 | shareCodesMap[key] = shareCodesMap[key].reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []); // 去重 53 | } 54 | let cookieCount = 0; 55 | if (process.env.JD_COOKIE) { 56 | if (process.env.JD_COOKIE.indexOf('&') > -1) { 57 | cookieCount = process.env.JD_COOKIE.split('&').length; 58 | } else { 59 | cookieCount = process.env.JD_COOKIE.split('\n').length; 60 | } 61 | } 62 | 63 | for (let key in shareCodesMap) { 64 | exports[key] = []; 65 | if (shareCodesMap[key].length === 0) { 66 | continue; 67 | } 68 | for (let i = 0; i < cookieCount; i++) { 69 | exports[key][i] = shareCodesMap[key].sort(() => Math.random() - 0.5).join('@'); 70 | } 71 | } 72 | 73 | -------------------------------------------------------------------------------- /py/jd_delete.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | """ 3 | cron: 20 10 */7 * * 4 | new Env('禁用重复任务'); 5 | """ 6 | 7 | import json 8 | import logging 9 | import os 10 | import sys 11 | import time 12 | import traceback 13 | 14 | import requests 15 | 16 | logger = logging.getLogger(name=None) # 创建一个日志对象 17 | logging.Formatter("%(message)s") # 日志内容格式化 18 | logger.setLevel(logging.INFO) # 设置日志等级 19 | logger.addHandler(logging.StreamHandler()) # 添加控制台日志 20 | # logger.addHandler(logging.FileHandler(filename="text.log", mode="w")) # 添加文件日志 21 | 22 | 23 | ip = "localhost" 24 | sub_str = os.getenv("RES_SUB", "JDWXX_jd_job") 25 | sub_list = sub_str.split("&") 26 | res_only = os.getenv("RES_ONLY", True) 27 | headers = { 28 | "Accept": "application/json", 29 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", 30 | } 31 | 32 | 33 | def load_send() -> None: 34 | logger.info("加载推送功能中...") 35 | global send 36 | send = None 37 | cur_path = os.path.abspath(os.path.dirname(__file__)) 38 | sys.path.append(cur_path) 39 | if os.path.exists(cur_path + "/notify.py"): 40 | try: 41 | from notify import send 42 | except Exception: 43 | send = None 44 | logger.info(f"❌加载通知服务失败!!!\n{traceback.format_exc()}") 45 | 46 | 47 | def get_tasklist() -> list: 48 | tasklist = [] 49 | t = round(time.time() * 1000) 50 | url = f"http://{ip}:5700/api/crons?searchValue=&t={t}" 51 | response = requests.get(url=url, headers=headers) 52 | datas = json.loads(response.content.decode("utf-8")) 53 | if datas.get("code") == 200: 54 | tasklist = datas.get("data") 55 | return tasklist 56 | 57 | 58 | def filter_res_sub(tasklist: list) -> tuple: 59 | filter_list = [] 60 | res_list = [] 61 | for task in tasklist: 62 | for sub in sub_list: 63 | if task.get("command").find(sub) == -1: 64 | flag = False 65 | else: 66 | flag = True 67 | break 68 | if flag: 69 | res_list.append(task) 70 | else: 71 | filter_list.append(task) 72 | return filter_list, res_list 73 | 74 | 75 | def get_index(lst: list, item: str) -> list: 76 | return [index for (index, value) in enumerate(lst) if value == item] 77 | 78 | 79 | def get_duplicate_list(tasklist: list) -> tuple: 80 | logger.info("\n=== 第一轮初筛开始 ===") 81 | 82 | ids = [] 83 | names = [] 84 | cmds = [] 85 | for task in tasklist: 86 | ids.append(task.get("_id")) 87 | names.append(task.get("name")) 88 | cmds.append(task.get("command")) 89 | 90 | name_list = [] 91 | for i, name in enumerate(names): 92 | if name not in name_list: 93 | name_list.append(name) 94 | 95 | tem_tasks = [] 96 | tem_ids = [] 97 | dup_ids = [] 98 | for name2 in name_list: 99 | name_index = get_index(names, name2) 100 | for i in range(len(name_index)): 101 | if i == 0: 102 | logger.info(f"【✅保留】{cmds[name_index[0]]}") 103 | tem_tasks.append(tasklist[name_index[0]]) 104 | tem_ids.append(ids[name_index[0]]) 105 | else: 106 | logger.info(f"【🚫禁用】{cmds[name_index[i]]}") 107 | dup_ids.append(ids[name_index[i]]) 108 | logger.info("") 109 | 110 | logger.info("=== 第一轮初筛结束 ===") 111 | 112 | return tem_ids, tem_tasks, dup_ids 113 | 114 | 115 | def reserve_task_only( 116 | tem_ids: list, tem_tasks: list, dup_ids: list, res_list: list 117 | ) -> list: 118 | if len(tem_ids) == 0: 119 | return tem_ids 120 | 121 | logger.info("\n=== 最终筛选开始 ===") 122 | task3 = None 123 | for task1 in tem_tasks: 124 | for task2 in res_list: 125 | if task1.get("name") == task2.get("name"): 126 | dup_ids.append(task1.get("_id")) 127 | logger.info(f"【✅保留】{task2.get('command')}") 128 | task3 = task1 129 | if task3: 130 | logger.info(f"【🚫禁用】{task3.get('command')}\n") 131 | task3 = None 132 | logger.info("=== 最终筛选结束 ===") 133 | return dup_ids 134 | 135 | 136 | def disable_duplicate_tasks(ids: list) -> None: 137 | t = round(time.time() * 1000) 138 | url = f"http://{ip}:5700/api/crons/disable?t={t}" 139 | data = json.dumps(ids) 140 | headers["Content-Type"] = "application/json;charset=UTF-8" 141 | response = requests.put(url=url, headers=headers, data=data) 142 | datas = json.loads(response.content.decode("utf-8")) 143 | if datas.get("code") != 200: 144 | logger.info(f"❌出错!!!错误信息为:{datas}") 145 | else: 146 | logger.info("🎉成功禁用重复任务~") 147 | 148 | 149 | def get_token() -> str or None: 150 | try: 151 | with open("/ql/config/auth.json", "r", encoding="utf-8") as f: 152 | data = json.load(f) 153 | except Exception: 154 | logger.info(f"❌无法获取 token!!!\n{traceback.format_exc()}") 155 | send("💔禁用重复任务失败", "无法获取 token!!!") 156 | exit(1) 157 | return data.get("token") 158 | 159 | 160 | if __name__ == "__main__": 161 | logger.info("===> 禁用重复任务开始 <===") 162 | load_send() 163 | token = get_token() 164 | headers["Authorization"] = f"Bearer {token}" 165 | 166 | # 获取过滤后的任务列表 167 | sub_str = "\n".join(sub_list) 168 | logger.info(f"\n=== 你选择过滤的任务前缀为 ===\n{sub_str}") 169 | tasklist = get_tasklist() 170 | if len(tasklist) == 0: 171 | logger.info("❌无法获取 tasklist!!!") 172 | exit(1) 173 | filter_list, res_list = filter_res_sub(tasklist) 174 | 175 | tem_ids, tem_tasks, dup_ids = get_duplicate_list(filter_list) 176 | # 是否在重复任务中只保留设置的前缀 177 | if res_only: 178 | ids = reserve_task_only(tem_ids, tem_tasks, dup_ids, res_list) 179 | else: 180 | ids = dup_ids 181 | logger.info("你选择保留除了设置的前缀以外的其他任务") 182 | 183 | sum = f"所有任务数量为:{len(tasklist)}" 184 | filter = f"过滤的任务数量为:{len(res_list)}" 185 | disable = f"禁用的任务数量为:{len(ids)}" 186 | logging.info("\n=== 禁用数量统计 ===\n" + sum + "\n" + filter + "\n" + disable) 187 | 188 | if len(ids) == 0: 189 | logger.info("😁没有重复任务~") 190 | else: 191 | disable_duplicate_tasks(ids) 192 | if send: 193 | send("💖禁用重复任务成功", f"\n{sum}\n{filter}\n{disable}") 194 | -------------------------------------------------------------------------------- /py/jd_hbtj.py: -------------------------------------------------------------------------------- 1 | """ 2 | const $ = new Env("统计东哥历史红包"); 3 | 统计东哥历史红包 4 | """ 5 | 6 | import requests 7 | import sys 8 | import re 9 | import time 10 | import os 11 | 12 | 13 | def gettimestamp(): 14 | return str(int(time.time() * 1000)) 15 | 16 | 17 | def printf(text): 18 | print(text) 19 | sys.stdout.flush() 20 | 21 | 22 | def getinfo(ck): 23 | isNext = True 24 | page = 1 25 | sum = 0 26 | usedsum = 0 27 | count = 0 28 | while isNext: 29 | url = "https://wq.jd.com/user/info/QueryUserRedEnvelopesV2?type=2&orgFlag=JD_PinGou_New&page=%s&cashRedType=1&redBalanceFlag=0&channel=3&_=%s&sceneval=2&g_login_type=1&g_ty=ls" % ( 30 | page, gettimestamp()) 31 | headers = { 32 | 'accept': '*/*', 33 | 'accept-encoding': 'gzip, deflate, br', 34 | 'accept-language': 'zh-CN,zh;q=0.9', 35 | 'dnt': '1', 36 | 'referer': 'https://wqs.jd.com/', 37 | 'sec-fetch-dest': 'script', 38 | 'sec-fetch-mode': 'no-cors', 39 | 'sec-fetch-site': 'same-site', 40 | 'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1', 41 | 'cookie': ck 42 | } 43 | r = requests.get(url, headers=headers).json() 44 | # print(r) 45 | if r['data']['unUseRedInfo']['redList'] == None: 46 | print('累计红包总数', count, '累计红包总额 %.2f' % sum, '已使用红包总额 %.2f' % usedsum) 47 | isNext = False 48 | else: 49 | page += 1 50 | count = r['data']['unUseRedInfo']['count'] 51 | for i in r['data']['unUseRedInfo']['redList']: 52 | sum += float(i['discount']) 53 | usedsum += (float(i['discount']) - float(i['balance'])) 54 | 55 | 56 | if __name__ == '__main__': 57 | try: 58 | printf("--------[212796668]群管理贡献--------") 59 | cks = os.environ["JD_COOKIE"].split("&") 60 | except: 61 | f = open("/jd/config/config.sh", "r", encoding='utf-8') 62 | cks = re.findall(r'Cookie[0-9]*="(pt_key=.*?;pt_pin=.*?;)"', f.read()) 63 | f.close() 64 | for ck in cks: 65 | ptpin = re.findall(r"pt_pin=(.*?);", ck)[0] 66 | printf("--------开始京东账号" + ptpin + "--------") 67 | try: 68 | getinfo(ck) 69 | except: 70 | print("发生异常错误") 71 | -------------------------------------------------------------------------------- /py/jd_pzhb_notify.py: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | """ 3 | cron: 10 10 10 10 * jd_pzhb_notify.py 4 | new Env('膨胀红包通知') 5 | updatetime:2022/10/22 6 | by dylan 7 | """ 8 | 9 | import requests 10 | import json 11 | import time 12 | import os 13 | import re 14 | import sys 15 | import random 16 | import string 17 | import urllib 18 | 19 | def ramUA(): 20 | global uuid,addressid,iosVer,iosV,clientVersion,iPhone,area,ADID 21 | uuid=''.join(random.sample(['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','a','b','c','z'], 40)) 22 | addressid = ''.join(random.sample('1234567898647', 10)) 23 | iosVer = ''.join(random.sample(["15.1.1","14.5.1", "14.4", "14.3", "14.2", "14.1", "14.0.1"], 1)) 24 | iosV = iosVer.replace('.', '_') 25 | clientVersion=''.join(random.sample(["10.3.0", "10.2.7", "10.2.4"], 1)) 26 | iPhone = ''.join(random.sample(["8", "9", "10", "11", "12", "13"], 1)) 27 | area=''.join(random.sample('0123456789', 2)) + '_' + ''.join(random.sample('0123456789', 4)) + '_' + ''.join(random.sample('0123456789', 5)) + '_' + ''.join(random.sample('0123456789', 4)) 28 | ADID = ''.join(random.sample('0987654321ABCDEF', 8)) + '-' + ''.join(random.sample('0987654321ABCDEF', 4)) + '-' + ''.join(random.sample('0987654321ABCDEF', 4)) + '-' + ''.join(random.sample('0987654321ABCDEF', 4)) + '-' + ''.join(random.sample('0987654321ABCDEF', 12)) 29 | UserAgent='' 30 | if not UserAgent: 31 | return f'jdapp;iPhone;10.0.4;{iosVer};{uuid};network/wifi;ADID/{ADID};model/iPhone{iPhone},1;addressid/{addressid};appBuild/167707;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS {iosV} like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/null;supportJDSHWK/1' 32 | else: 33 | return UserAgent 34 | 35 | def printf(text): 36 | print(text) 37 | sys.stdout.flush() 38 | 39 | def load_send(): 40 | global send 41 | cur_path = os.path.abspath(os.path.dirname(__file__)) 42 | sys.path.append(cur_path) 43 | if os.path.exists(cur_path + "/sendNotify.py"): 44 | try: 45 | from sendNotify import send 46 | except: 47 | send=False 48 | print("加载通知服务失败~") 49 | else: 50 | send=False 51 | print("加载通知服务失败~") 52 | load_send() 53 | 54 | def get_remarkinfo(): 55 | url='http://127.0.0.1:5600/api/envs' 56 | try: 57 | with open(re.sub('scripts.*','config',os.getcwd())+'/auth.json', 'r') as f: 58 | token=json.loads(f.read())['token'] 59 | headers={ 60 | 'Accept':'application/json', 61 | 'authorization':'Bearer '+token, 62 | } 63 | response=requests.get(url=url,headers=headers) 64 | 65 | for i in range(len(json.loads(response.text)['data'])): 66 | if json.loads(response.text)['data'][i]['name']=='JD_COOKIE': 67 | try: 68 | if json.loads(response.text)['data'][i]['remarks'].find('@@')==-1: 69 | remarkinfos[json.loads(response.text)['data'][i]['value'].split(';')[1].replace('pt_pin=','')]=json.loads(response.text)['data'][i]['remarks'].replace('remark=','').replace(';','') 70 | else: 71 | remarkinfos[json.loads(response.text)['data'][i]['value'].split(';')[1].replace('pt_pin=','')]=json.loads(response.text)['data'][i]['remarks'].split("@@")[0].replace('remark=','').replace(';','') 72 | except: 73 | pass 74 | except: 75 | printf('读取auth.json文件出错,跳过获取备注\n') 76 | def getinfo(ck): 77 | global sendnotifycation 78 | global inflateMaxAward 79 | inflateMaxAward=0 80 | url='https://api.m.jd.com/client.action?functionId=promote_pk_getAmountForecast' 81 | headers={ 82 | 'content-type':'application/x-www-form-urlencoded', 83 | 'accept':'application/json, text/plain, */*', 84 | 'accept-language':'zh-cn', 85 | 'accept-encoding':'gzip, deflate, br', 86 | 'origin':'https://wbbny.m.jd.com', 87 | 'user-agent':UserAgent, 88 | 'referer':'https://wbbny.m.jd.com/', 89 | 'cookie':ck 90 | } 91 | data='functionId=promote_pk_getAmountForecast&client=m&clientVersion=-1&appid=signed_wh5&body={}' 92 | response=requests.post(url=url,headers=headers,data=data) 93 | try: 94 | printf('可膨胀金额:'+json.loads(response.text)['data']['result']['inflateMaxAward']+'\n\n') 95 | if(float(json.loads(response.text)['data']['result']['inflateMaxAward'])>=10): 96 | inflateMaxAward=float(json.loads(response.text)['data']['result']['inflateMaxAward']) 97 | except Exception as e: 98 | printf('获取失败,黑号或者没有参加5人以上的队伍\n\n') 99 | if __name__ == '__main__': 100 | remarkinfos={} 101 | get_remarkinfo()#获取备注 102 | msg='' 103 | sendnoty='true' 104 | try: 105 | cks = os.environ["JD_COOKIE"].split("&")#获取cookie 106 | except: 107 | f = open("/jd/config/config.sh", "r", encoding='utf-8') 108 | cks = re.findall(r'Cookie[0-9]*="(pt_key=.*?;pt_pin=.*?;)"', f.read()) 109 | f.close() 110 | for ck in cks: 111 | UserAgent=ramUA() 112 | ptpin = re.findall(r"pt_pin=(.*?);", ck)[0] 113 | try: 114 | if remarkinfos[ptpin]!='': 115 | printf("--账号:" + remarkinfos[ptpin] + "--") 116 | else: 117 | printf("--无备注账号:" + urllib.parse.unquote(ptpin) + "--") 118 | except: 119 | printf("--账号:" + urllib.parse.unquote(ptpin) + "--") 120 | getinfo(ck) 121 | try: 122 | if inflateMaxAward != 0: 123 | msg+=remarkinfos[ptpin] + ' 的膨胀红包最大金额为 '+str(inflateMaxAward)+' 元\n' 124 | except: 125 | msg+=urllib.parse.unquote(ptpin) + ' 的膨胀红包最大金额为 '+str(inflateMaxAward)+' 元\n' 126 | if sendnoty: 127 | try: 128 | send('穿越寻宝膨胀红包',msg) 129 | except: 130 | send('穿越寻宝膨胀红包','错误,请查看运行日志!') -------------------------------------------------------------------------------- /py/jd_try_notify.py: -------------------------------------------------------------------------------- 1 | #Source: https://github.com/Hyper-Beast 2 | 3 | """ 4 | cron: 20 20 * * * 5 | new Env('京东试用成功通知'); 6 | """ 7 | 8 | import requests 9 | import json 10 | import time 11 | import os 12 | import re 13 | import sys 14 | import random 15 | import string 16 | 17 | 18 | def load_send(): 19 | global send 20 | cur_path = os.path.abspath(os.path.dirname(__file__)) 21 | sys.path.append(cur_path) 22 | if os.path.exists(cur_path + "/sendNotify.py"): 23 | try: 24 | from sendNotify import send 25 | except: 26 | send=False 27 | print("加载通知服务失败~") 28 | else: 29 | send=False 30 | print("加载通知服务失败~") 31 | load_send() 32 | 33 | 34 | def printf(text): 35 | print(text) 36 | sys.stdout.flush() 37 | 38 | def getinfo(ck): 39 | url='https://api.m.jd.com/client.action' 40 | headers={ 41 | 'accept':'application/json, text/plain, */*', 42 | 'content-type':'application/x-www-form-urlencoded', 43 | 'origin':'https://prodev.m.jd.com', 44 | 'content-length':'249', 45 | 'accept-language':'zh-CN,zh-Hans;q=0.9', 46 | 'user-agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1', 47 | 'referer':'https://prodev.m.jd.com/', 48 | 'accept-encoding':'gzip, deflate, br', 49 | 'cookie':ck 50 | } 51 | uuid=''.join(random.sample(['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','a','b','c','z'], 40)).replace(" ","") 52 | area1=random.randint(10,99) 53 | area2=random.randint(1000,9999) 54 | area3=random.randint(10000,99999) 55 | area4=random.randint(1000,9999) 56 | area=str(area1)+"_"+str(area2)+"_"+str(area3)+"_"+str(area4) 57 | data='appid=newtry&functionId=try_MyTrials&uuid='+uuid+'&clientVersion=10.3.0&client=wh5&osVersion=15.1.1&area='+area+'&networkType=wifi&body=%7B%22page%22%3A1%2C%22selected%22%3A2%2C%22previewTime%22%3A%22%22%7D' 58 | response=requests.post(url=url,headers=headers,data=data) 59 | isnull=True 60 | try: 61 | for i in range(len(json.loads(response.text)['data']['list'])): 62 | if(json.loads(response.text)['data']['list'][i]['text']['text']).find('试用资格将保留')!=-1: 63 | print(json.loads(response.text)['data']['list'][i]['trialName']) 64 | send("京东试用待领取物品通知",'账号名称:'+ptpin+'\n'+'商品名称:'+json.loads(response.text)['data']['list'][i]['trialName']+"\n"+"商品链接:https://item.jd.com/"+json.loads(response.text)['data']['list'][i]['skuId']+".html") 65 | isnull=False 66 | i+=1 67 | if isnull==True: 68 | print("没有在有效期内待领取的试用品") 69 | except: 70 | pass 71 | if __name__ == '__main__': 72 | try: 73 | cks = os.environ["JD_COOKIE"].split("&") 74 | except: 75 | f = open("/jd/config/config.sh", "r", encoding='utf-8') 76 | cks = re.findall(r'Cookie[0-9]*="(pt_key=.*?;pt_pin=.*?;)"', f.read()) 77 | f.close() 78 | for ck in cks: 79 | ptpin = re.findall(r"pt_pin=(.*?);", ck)[0] 80 | printf("--账号:" + ptpin + "--") 81 | getinfo(ck) -------------------------------------------------------------------------------- /py/jd_wskeyVIP.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -* 2 | ''' 3 | 使用携趣代理需要安装依赖:docker exec -it QL bash -c "pip install -U requests[socks]" 4 | cron: 15 2 * * * jd_wskeyVIP.py 5 | new Env('wskey文件转换版'); 6 | ''' 7 | 8 | import zlib, base64 9 | exec(zlib.decompress(base64.b64decode('eJzNPGlz20ay3/UrsNjyoxRTFGYADAC5+OolsrNxIluOY8fr2C4WCAwkWLxMgDqcyn/f6bkBkBRlZ/MiV8HQHD2NvqenR+V0MV/WzjitKAmcf07KGT1Ge6Vo/VjNZ7INq7Z5JVt81VLdqqZANU3m5+fl7Fw2h6q5LqdUtpG9snDcN7/89OTt6PGT717/yy1nAHtAZ1flki17LMbFew77UfAGDM8yO5nPivLc2Z/QKzpxhrqTw3H6xXw5TWtn2HuwP6VVlZ7Tg6p3IMAlGhxdWjPPaX0q2vZHo1k6paORI2cgz54yyOl4xZZ23688L8zgSSg8g4A/Q/7EvFe8R+9XJMXo/SosvII/PfYMcAG90G7guGpJtEcnFVUkQPgeNHj6/Puz7SRA/v1pEOzVy1uND+EAJE+X9NOKVrUSARTt0ZuMLmrnCf+vZKxMK8d8TNwgZzkr5s5+VbNFqXPwsEXWqPBTRqwMcTJFnKyEkzUSLaHV4vNnoN4l0aMw4oTmMDEjfTwugCWYsGccBxkwI8rfrwJK2dyiQCmH4HHIiXn3fQVBtQvG2+sSjhXJzFOMvx/mawRCiC0o2oDelLWzjxRrsLdna8273mw+WiznN7e9D8PeNz05CO1pNg0WaXbJBIK9rZaTSTn2mVCXVTqe0NF1upwxWaicfQUd24zHQnKK5XzqzOZ1WdwqIajoLFeGIlgvAMulBhOu0yghA2zUgVqbrJEUJiAkpIyoxE/j96vE8xC0xBEwsCCKYDjauwLhdtHAY/+QK5uTvZwWDpP0V/NLOnP2z868M/iBp+exp9M/kz8e/LAOzzmQePuII2QRxBeaCT8cBkzgoNh/zvD3XrGaZUCAp3nvuHdOZ3zVXr+XTUo6q3+ly4p1si7kDfxByDrGq3ICYxMckFgPZA3pLF/Oy5w1LdJlPaNLADifn08oa5qnJUxakqs6DifkYnF1kXy6vWA9VX5pVvERa5mks3P2/vlidPKc/XqRLqfz2e1Zxdo89vuM1tfz5eWr2wVlLa+f//T87A2MW9Hpgo85xOw3egM4/e4ullWd1tQ9dlzP7Tvu4ir7pV7Br8j9A8YV8HHwsuDjL/Iyd4/dH58l36Pb69cvrovJ1bOni7cv5pdeXYeXyeWb4Nvlj09e+5Pi9OLmu0/XQ7fv1pXLbE4QegRHJGbq2HeXZX7jHh+ivpuViwu6dI9/d/PRdJ7TCcB/s5qd/Pprmb98tWTzr8ui/K6q+NL5m/BifJ34409DAD2vJHlY18mPv0BTPhovGbVZw5ufr5ZjjArWWGVLSsWg1e3JMzo7ef4JBq9WHOrJv0/Lt29e4ZP6Lf7t5YvgLQ7Dt2KF9K4B8wWdrfLto/5Q31kzvrjHYd+90mijAR54sNBiAUabtWTz6eAjU+N8PjsfsObBNJ1MOD8qxrYGJR3WVp5zESzCCOdBlmFmc0keIZoWJC9QSMcBTRMQzuoKxiHU+0NKvzAH67S9oVNciZTGBFpjOorN7J5nrKi0mcKi5so2hn6GQeHBJsf+OIKWnLBn4rORcY5DZQL8sLOSbWm6GCq74xM9cUnr1XLmfJ+CN+53jYWcEO0pC+DJXm4KwAJk8/llyVRpjaFhfbOaafdhLZSNcWpSZimQ8Ojm8Pr6+hC8+CEz0nSWMcnOHzkZU9eK1sPXr74/5OZB/A6aKlvSDLhwyGeUXNPHy/7553LRZ4ZvwnQVdLmiy0PmAcCwrFJHcjMQnBG4qy8BRIe9i7peVMdHR+miHDDRygdMwo6EaRqk3MBJPxOEhhKCsGcKxnie3w4fRN89wLies8cD/1v25JAf4NBP2QMX/LFg7CpneiHe9jE/nPJm/hsYnTLjrxf1dMJfGPU+ThejMbNvlwPRih9Ej/9HYUbatjuINJtZJHpTMv/ozJfyZTjsvVquGFfk2FiPFd+nXYRk5tByr/OK+WfGNWfYpWWfWe90WrGujrvoX9A0Z1ot+pqC1M/TOpUdDbr2wdWXzJcPp7fqtQ9R9nzFoj/kqSghSPQH2JFl6P1dv2vNN4TIOFu+gEQS3pwh36oMJvM0r4RyNz9kUDOfpSFZbptDEMrJH/zrWsDf9Wpw3D9RFlRJCF9g+sItpi8a48x9qA1TK/6AsDigmAemIpwNeZgYjM2eI2QhaVxA0El8gnl8FIJxpGA0UcHmJiFKmqEwm5sosxvH6RhCbYinAhozk+p7CHYqFObG45Q29y4kgNA8zlOfh87sGQWemIWUCQ7De1rSUGhpQ0SjNgyh6etjtw43FSYxD/z0VM/zFH+klErZ9Aw0FfYRTxrG9pyhu6hHimud3kHFzDnTGPeRe/DOcz5ITIiQYmZyuisyq3Nzc6OMDsEb5EUu2MFXreBvn9dGVO66/LERr8gSL7lHYYIS4TFjMOEht/C3JAxixWwSbGJ2Z0U5QTmLM6lv8pPAbb4GF/WtdlHKr4GX5C/HoM5HYOb7DbcJLQ9v2q3TyaNPQ2+Q9Mspc3tH6VVZyNdrOl6o1sXsvP/N0Td8aNwAACESzQ+Ztl+w6Jk+uhqOfQGRedObQ2kj2Yjrsr5gOK4NwFTUFBlxkpZGkAY+W5uZ4y57+6yXwVa+uOUlj7SHPBLekRPnqOMVe32FRmDQOPPUap7t7lcW+Oy8PBwz4AygBCodaxS2HWtEbOsqWXsmbaHlUNguTPuTNhK202iLh/E1HRL2WVgMu9KhFD1G9vn1aEnzckkztqZq194Fa+8SRVstuuIHf9VfGm8LZoPU5IXCwgpsPSvBkFrhrafssm27hdWOx7RoJjASlOXwnoeQzEBMMWO2DHsnRaB8gG3fu0mFKNlqJzofrexL7N1T0WPUseqxsW2W5MR+MxzxVKAgGSxY3hSogYiwhTyN8jKrdfIiDlrgRDTgqeiFiToz4Jf0dth72F3rnexULj8Ou9DOjJpKaItythka69TQSDvykoKsnP5QW+smzgcPe4+cnnE6TRx472gE8j2Ug3jOdcCf+5qFxqneS+DjZhz8Jwk98XNP7ePYXO57SGE9x1bOLfxvqkScbPm+O9QiacbSu6lGYmJaWz0S3IDFgoVekV7SXjlbI8VqTlN5NuH/Z7v/dWRMgg4qO5KjqWMNkpBNMGGjxtN2LQ2S8yIe+WWT+SofCUKowC5J9I5XB43wI3VPHokMxiTIKWzAubcasV3EQP1+wPQtu6DZ5YhtjXvqvEAIAtu8O3IX4alw9MxhHFxCDOHs+zrARB5aZw2Rh9s2Qpo/KX0sYnDTVX0xX5afeaDiHrvf0XTJWP7LRfl5dbly/1CgWpZVbW/MJ6/3y23KtB1sy03byDWdrNh/KWyCtvkxq1NliNj7yXw2Y377lQSk6RLeZYXMCYKdIwpowoQ2SsFuNPJIeQxWIixIc3tExgQ2TxGOm7YFjm102N9m8IE+NmoKrDDD1YTShZW9R17UGAUpoXK2oppS8W6Uesn40CHTNmP2tyET8nYhE0JbyYTwdn+mUxVS5DWNkL87jUgEO/Aooi0XZNPLpkvi8d0y33vHCI6VGIRM0kV/WLAWgUamsoO9IV5TE9adDyFE1roYhJqSZxseFHdsrbbY8v9uxqVtUfT6TTG8H3+wd4dTc7fIawLxM4kSb116GGG0EfSO1Me4A2EtB7C/0ashvNFVdimupoTCo3G/w/2acWkIx2pbZ7ZMPKM2fNdLf3jpZY/nV6eff/58+vHJ5+e/BOGzk+D22W08hNQxdP/wjJzeJp/Tf01I/qZGp1NUnV4PW90ffyvD7pAPCoXE+D+5qVM7We7/urgp5H3DbZ3XUSHCZqfcXcR20Ar0ehfrN1m41gl2MGk7wTW5SuT7O1gkue+1k4TI39Ug2JPNZ4Zb7aS/wRb4UYsMQgI7hFXD153ht6xlQysjH3QwCrg9JPzclsbtKLJzRB9n4F24vY2KEKDRvG0//aSdfkCBkSJ+LL3f2z1vyuR8C+pNdOnO6FJdehGgzVmGjSIRdBOBO4pDsCkV6AILkHZnzPEjdZi+xlTKo6G1xi0I1ZH66Lpi22XLFslTE7Z7mfOyg/qCTwf92m/ULLg/n44eP33pfnjoHmW8ruWIwxrUN7VrwG3KV4j9S/51T8bEsT5MxMD0BAU5sJL7fl1h8PVrabJapy+QOHTgJPg+lOm7S7evTvqcobuqi8PYPRCypBRXuC4tS2HT66kchXLcZ/JwpzF3sGTRpc6qoLC1LemOZ06potaE9ubjTObspHnhB0AtNHT2/P3M0Gu9adRC0DgP5izU9TfWtpa0trUyiOUhAwtfC7Pctm3GRFSPtL9Ea15ItuP69QJ7l3BtMOltjNXwuJOjQ+EWhRPBcFdpdqS4qJwSFU+xeRecaBfzIGJZdGODjLMlaI9rxeuXp85wd/1Rs/29Hx+PTs7Ofnr6ZLQTCD28ASYQSDx9zFRRN4aiEfZmbCOsqE1E9aPuatc+psxtTbrGwIz/cPC/yJTjCd5ZC22cpmYkmxy49GctrkZ+Cr4wjnkFRi42ejr7FtA0gycCJxpD1V2SxpnaKiZhEewqF2FgZfpy1atq8rDnPjQfqZgfec1iyQhtKBvbILH/v98mwp6EwrrxOA1gLT81MH2s3qMkx+pQNi4ysHQFZasEnDoMAmpnNwFyUASQtCOYb47EdpV7fOsot318K2mtCYz3ysVrCIW1WEf+Hq8xfM3aNh8FRyGkBAj2AdfAy/XsQMx+sXV2OM4ARuwhPS8U836ASgQLGSLBQSGi1RyJ5mcUSgxcONQ6Pjp6sA/VLwfV8YP9RVpVB9X/Pdi/YPBEC4NwULkPfnehyT02q/Vd6JMtfKG+C4Bky2sYwMCpAY46ZUOxv2cqM4Y9lSOMgz1ZaCL2EKo55HaBd+1oE8TYhj2QWXq5wNrhamSiIjRXfMeOi8rBjVWt/LeSjfWT1Hi02bt0PXlQENABEgdbSw+8rtQpmQYr4j6UqOm6Wtx1e8mWoPnLjIg+/hAlbYXl9oS6akMgthIil7YJZkAx+yiScxxw+qcQZ0cMjVGwUvxrXbLM5GvJenEfyXrRkizSlKwXayXrhZGsaNtGAbcrB+8pX8Yu2ZKl/JNEUJNhTViVfEFY9ZXy5f1V8tUlzt246Zptb3uYhz1dOuNyh7SjSImxtkRh62RFura1U9ToLQbhayTJ9tb2Gaidc+hKmEBY0yToCBj2upWvXy1g9k0IYQwkQ7O/SrR2p9ad2FoiR+40FeNxAYEepRYxrC2LfHom9JPhW2GeMjC0nnIDFFshYedyiBhDRDhJLWjWZRJiBZWNdutKiYSDDIYS29h8kXzy7AaJzFxxKryxHQifF5ini/gVmpT7lQx9HUzGamTsFrC9WSLw5ZATzwNomLZgmu2/xUERgHNL5qHmXFsYQz8oVIWkUlR5Lh5YT89wcFMvZCe7a8VFzsaEJIc8VOxn6iaZXitVc9m7gE8VnJBFx8AX+MaExFC3ibzi62gYhajgBRZAsaCgol7JqFR0hxWP95rWasNedJM1IBlPHSPYhdm6//dQTvtmmFTO0FI22sZQ7gS5XfKF8Ak1FonGwLzLFvHkq/jGjrUuKWoihknMwCUR3+xt2PIVhffF5lvHH9uJBet6vlV3LKReWCx1Fc58DNprf8jMUXOZLANWNPGb7FfacF/2CxmXFjSwIAiscIfZhWGb1Ga75EmcMsTmKVdJjUCEdkvRWaWBj2OI4neIslIeikLMRTNux+A8I0q9seaodSJ6F43WUMe3uBuZFjuBJ2M6249kSvJIBHYsoLDTIAgwEa5e4sZliOCYH5wIuYQUCMnB/kdFal3IFGrhI+s9slSBdJ6xkmy7RUMQ3+tb754FLdKJFuvcnkQg2TGiKa+Qp81jHrFWQLMQgpoENCTB8I1jXjVlfWM4JtwmE6+le7go1A5NwE+iEKxrBtUUoj3xUNCssccoMLnEp4/vk0lkoxtRsawm0FnMDVPUaKKi8X09Y+hihKOEEBKTGDGaekmkD3AwunNfJonO82DxOEPqlErku7q5KYy6+yuMtuyv1AJA77jgNgSR0Eju9hSe8PlBYKHbRgjfsYfBzavdGOP1hluwniGXKcMtTTbfWu1usm1jbdNVwPmSzzaf6m88FcQ44KeCqwVc8BGJKH0uiOXF3jN9yUbWAa4vQhP7nY1n7qRVXIZxpOWyWaHSWe7gXQ+qBHof/jE0l3wx3lTUzQ9b7wY5rc57H/QdZpxslwdZ8qAqIc9MqfPdKwFtVdUFlpUM6lzHU5XSqoDBhg3XUd71nr4wk33DEV1dDUd5GydDDtRMD6y1rbPAL0y7dr9BpV+7CO6WhsVB8w6PquiBuyYcRbWojXyf91TrujTYQB1+cwnc11VuprpWiVX3AiK2biDqqwyqUK6jC13Qtg54bS2wbixa9UTNJdTQZEtNgi5AEhQwV/i9zUbWdovMdmEI14w7FlaLhSg5T0FSu2hQ25YQKcL+sBpbpkMeJRuhlJVZzlAVBonKn/FtTZnajF2raunTbz/kAT0JZ+m/X87zN09X6Zv4Kp2+LNJpUp76+ecU/xqezl4G+bfMkWlMOvdbcGhfcNEkEsg4QyMMHSQ1zM2OcGYWNhwEW9Zd6R9D+BMHhjR3lHuGBWwRQ8yLGjBsQUVYE/rAD5Ed5wAlPOJth0f4poKEY28zvC7SGjraDt0OEL8+EBSb4S8LBOX2hWfMCI7o5i8XwYXtpxvhYCfsC9leWYV9AYUNU1DgFoRGqEfa1WpWTb0a4rf1npfHq97AVnUlOWTDNU3VzQ+r9Z+EGQ57o9E0LWejUU9DELJa2VarohX8hQLzp0TkoTPrUlXjAx4fUGf/d/dE3oV/xf/AgWvfvgNH+Khx8939Q/+ZDyGkoi5/2CyJVEOEpIkLAOnynA2z7wKoUYK0q1R1w8h39j1E5ewiX8UXgkrDYcdKRdsPR3CkAu1JCSeZdu2UGiFMTFGy2D2FE/1mhYIaJewIr5Z+vpo6Q0/3CIZkl61mwQKr2kiv0O9d96B0CBpG8/FHmhkBsW582d2D62UJ3HO1gMqbXlD6eV1Braf8RA3ICPB1tWD9w+uqc1FWjfVt++ey0S4HCNM0vGZFkIQpruWKXx4yqGpws57nzkv/OO5eOWGTWMwwFHR9gDyDSdQZy+WpEQCrsc3yagHs4RApLrVuITVK4gsWENZyxyXKIBTUtfePmFxx+ZJ/7ob91hfL6VmoTZR9a+bw+XxGjYtJugXP4yVNLxXirStIDJiBBZzVcLpFz1qGLTq0bgPBT9eroSRRmzi4RC+ssLx2oIHyO05itwb36LW8rrlUtF430o26kaxn/Do94ThZFEHOB0DMuPxkQ12tyLWGOCmad/zVZTmoZ4UMjwG0LqdqqCFG+d6GpCHzePlf/9R/t0Ue8zUt538AWWJF1w=='))) -------------------------------------------------------------------------------- /ql.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const got = require('got'); 4 | require('dotenv').config(); 5 | const { readFile } = require('fs/promises'); 6 | const path = require('path'); 7 | 8 | const qlDir = '/ql'; 9 | const fs = require('fs'); 10 | let Fileexists = fs.existsSync('/ql/data/config/auth.json'); 11 | let authFile=""; 12 | if (Fileexists) 13 | authFile="/ql/data/config/auth.json" 14 | else 15 | authFile="/ql/config/auth.json" 16 | //const authFile = path.join(qlDir, 'config/auth.json'); 17 | 18 | const api = got.extend({ 19 | prefixUrl: 'http://127.0.0.1:5600', 20 | retry: { limit: 0 }, 21 | }); 22 | 23 | async function getToken() { 24 | const authConfig = JSON.parse(await readFile(authFile)); 25 | return authConfig.token; 26 | } 27 | 28 | module.exports.getEnvs = async () => { 29 | const token = await getToken(); 30 | const body = await api({ 31 | url: 'api/envs', 32 | searchParams: { 33 | searchValue: 'JD_COOKIE', 34 | t: Date.now(), 35 | }, 36 | headers: { 37 | Accept: 'application/json', 38 | authorization: `Bearer ${token}`, 39 | }, 40 | }).json(); 41 | return body.data; 42 | }; 43 | 44 | module.exports.getEnvsCount = async () => { 45 | const data = await this.getEnvs(); 46 | return data.length; 47 | }; 48 | 49 | module.exports.addEnv = async (cookie, remarks) => { 50 | const token = await getToken(); 51 | const body = await api({ 52 | method: 'post', 53 | url: 'api/envs', 54 | params: { t: Date.now() }, 55 | json: [{ 56 | name: 'JD_COOKIE', 57 | value: cookie, 58 | remarks, 59 | }], 60 | headers: { 61 | Accept: 'application/json', 62 | authorization: `Bearer ${token}`, 63 | 'Content-Type': 'application/json;charset=UTF-8', 64 | }, 65 | }).json(); 66 | return body; 67 | }; 68 | 69 | module.exports.updateEnv = async (cookie, eid, remarks) => { 70 | const token = await getToken(); 71 | const body = await api({ 72 | method: 'put', 73 | url: 'api/envs', 74 | params: { t: Date.now() }, 75 | json: { 76 | name: 'JD_COOKIE', 77 | value: cookie, 78 | _id: eid, 79 | remarks, 80 | }, 81 | headers: { 82 | Accept: 'application/json', 83 | authorization: `Bearer ${token}`, 84 | 'Content-Type': 'application/json;charset=UTF-8', 85 | }, 86 | }).json(); 87 | return body; 88 | }; 89 | 90 | module.exports.updateEnv11 = async (cookie, eid, remarks) => { 91 | const token = await getToken(); 92 | const body = await api({ 93 | method: 'put', 94 | url: 'api/envs', 95 | params: { t: Date.now() }, 96 | json: { 97 | name: 'JD_COOKIE', 98 | value: cookie, 99 | id: eid, 100 | remarks, 101 | }, 102 | headers: { 103 | Accept: 'application/json', 104 | authorization: `Bearer ${token}`, 105 | 'Content-Type': 'application/json;charset=UTF-8', 106 | }, 107 | }).json(); 108 | return body; 109 | }; 110 | 111 | module.exports.DisableCk = async (eid) => { 112 | const token = await getToken(); 113 | const body = await api({ 114 | method: 'put', 115 | url: 'api/envs/disable', 116 | params: { t: Date.now() }, 117 | body: JSON.stringify([eid]), 118 | headers: { 119 | Accept: 'application/json', 120 | authorization: `Bearer ${token}`, 121 | 'Content-Type': 'application/json;charset=UTF-8', 122 | }, 123 | }).json(); 124 | return body; 125 | }; 126 | 127 | module.exports.EnableCk = async (eid) => { 128 | const token = await getToken(); 129 | const body = await api({ 130 | method: 'put', 131 | url: 'api/envs/enable', 132 | params: { t: Date.now() }, 133 | body: JSON.stringify([eid]), 134 | headers: { 135 | Accept: 'application/json', 136 | authorization: `Bearer ${token}`, 137 | 'Content-Type': 'application/json;charset=UTF-8', 138 | }, 139 | }).json(); 140 | return body; 141 | }; 142 | 143 | module.exports.getstatus = async(eid) => { 144 | const envs = await this.getEnvs(); 145 | var tempid = 0; 146 | for (let i = 0; i < envs.length; i++) { 147 | tempid = 0; 148 | if (envs[i]._id) { 149 | tempid = envs[i]._id; 150 | } 151 | if (envs[i].id) { 152 | tempid = envs[i].id; 153 | } 154 | if (tempid == eid) { 155 | return envs[i].status; 156 | } 157 | } 158 | return 99; 159 | }; 160 | 161 | module.exports.getEnvById = async(eid) => { 162 | const envs = await this.getEnvs(); 163 | var tempid = 0; 164 | for (let i = 0; i < envs.length; i++) { 165 | tempid = 0; 166 | if (envs[i]._id) { 167 | tempid = envs[i]._id; 168 | } 169 | if (envs[i].id) { 170 | tempid = envs[i].id; 171 | } 172 | if (tempid == eid) { 173 | return envs[i].value; 174 | } 175 | } 176 | return ""; 177 | }; 178 | 179 | module.exports.getEnvByPtPin = async (Ptpin) => { 180 | const envs = await this.getEnvs(); 181 | for (let i = 0; i < envs.length; i++) { 182 | var tempptpin = decodeURIComponent(envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/) && envs[i].value.match(/pt_pin=([^; ]+)(?=;?)/)[1]); 183 | if(tempptpin==Ptpin){ 184 | return envs[i]; 185 | } 186 | } 187 | return ""; 188 | }; 189 | 190 | module.exports.delEnv = async (eid) => { 191 | const token = await getToken(); 192 | const body = await api({ 193 | method: 'delete', 194 | url: 'api/envs', 195 | params: { t: Date.now() }, 196 | body: JSON.stringify([eid]), 197 | headers: { 198 | Accept: 'application/json', 199 | authorization: `Bearer ${token}`, 200 | 'Content-Type': 'application/json;charset=UTF-8', 201 | }, 202 | }).json(); 203 | return body; 204 | }; 205 | -------------------------------------------------------------------------------- /ql212796668.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | exports.__esModule = true; 3 | var USER_AGENTS = [ 4 | "jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; ONEPLUS A5010 Build/QKQ1.191014.012; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 5 | "jdapp;iPhone;10.0.2;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", 6 | "jdapp;android;10.0.2;9;network/4g;Mozilla/5.0 (Linux; Android 9; Mi Note 3 Build/PKQ1.181007.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36", 7 | "jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; GM1910 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 8 | "jdapp;android;10.0.2;9;network/wifi;Mozilla/5.0 (Linux; Android 9; 16T Build/PKQ1.190616.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 9 | "jdapp;iPhone;10.0.2;13.6;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 10 | "jdapp;iPhone;10.0.2;13.6;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 11 | "jdapp;iPhone;10.0.2;13.5;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 12 | "jdapp;iPhone;10.0.2;14.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 13 | "jdapp;iPhone;10.0.2;13.3;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 14 | "jdapp;iPhone;10.0.2;13.7;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 15 | "jdapp;iPhone;10.0.2;14.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 16 | "jdapp;iPhone;10.0.2;13.3;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 17 | "jdapp;iPhone;10.0.2;13.4;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 13_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 18 | "jdapp;iPhone;10.0.2;14.3;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 19 | "jdapp;android;10.0.2;9;network/wifi;Mozilla/5.0 (Linux; Android 9; MI 6 Build/PKQ1.190118.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 20 | "jdapp;android;10.0.2;11;network/wifi;Mozilla/5.0 (Linux; Android 11; Redmi K30 5G Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045511 Mobile Safari/537.36", 21 | "jdapp;iPhone;10.0.2;11.4;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15F79", 22 | "jdapp;android;10.0.2;10;;network/wifi;Mozilla/5.0 (Linux; Android 10; M2006J10C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 23 | "jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; M2006J10C Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 24 | "jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; ONEPLUS A6000 Build/QKQ1.190716.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045224 Mobile Safari/537.36", 25 | "jdapp;android;10.0.2;9;network/wifi;Mozilla/5.0 (Linux; Android 9; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 26 | "jdapp;android;10.0.2;8.1.0;network/wifi;Mozilla/5.0 (Linux; Android 8.1.0; 16 X Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 27 | "jdapp;android;10.0.2;8.0.0;network/wifi;Mozilla/5.0 (Linux; Android 8.0.0; HTC U-3w Build/OPR6.170623.013; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044942 Mobile Safari/537.36", 28 | "jdapp;iPhone;10.0.2;14.0.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 29 | "jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; LYA-AL00 Build/HUAWEILYA-AL00L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045230 Mobile Safari/537.36", 30 | "jdapp;iPhone;10.0.2;14.2;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 31 | "jdapp;iPhone;10.0.2;14.3;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 32 | "jdapp;iPhone;10.0.2;14.2;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 33 | "jdapp;android;10.0.2;8.1.0;network/wifi;Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/045131 Mobile Safari/537.36", 34 | "jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; Redmi K20 Pro Premium Edition Build/QKQ1.190825.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045227 Mobile Safari/537.36", 35 | "jdapp;iPhone;10.0.2;14.3;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 36 | "jdapp;iPhone;10.0.2;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", 37 | "jdapp;android;10.0.2;11;network/wifi;Mozilla/5.0 (Linux; Android 11; Redmi K20 Pro Premium Edition Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045513 Mobile Safari/537.36", 38 | "jdapp;android;10.0.2;10;network/wifi;Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045227 Mobile Safari/537.36", 39 | "jdapp;iPhone;10.0.2;14.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1", 40 | ]; 41 | /** 42 | * 生成随机数字 43 | * @param {number} min 最小值(包含) 44 | * @param {number} max 最大值(不包含) 45 | */ 46 | function randomNumber(min, max) { 47 | if (min === void 0) { min = 0; } 48 | if (max === void 0) { max = 100; } 49 | return Math.min(Math.floor(min + Math.random() * (max - min)), max); 50 | } 51 | var USER_AGENT = USER_AGENTS[randomNumber(0, USER_AGENTS.length)]; 52 | exports["default"] = USER_AGENT; 53 | -------------------------------------------------------------------------------- /ql_jlhb_log.js: -------------------------------------------------------------------------------- 1 | let logs = [ 2 | // 规则 '"random":"75831714","log":"1646396568418~1jD944JQwte04e32344190a3fa2f6ece5848b6ef4f6~2%2C1~78E76C44C9698B0C479840C12AC5F004C1A9AF47~0cp5nvc~C~TRJEXBUPbW0cE0NbWxIKahVRBx0GaxsNdRwBcxtAGkQSHRVRAx0Jfxt3DhwBdWYZBx4AAQcZQhIcE1MCGwQCHQZ%2BGgEDaRsEGAAAARtBFG0cE1BHWBIKEwQFFBwSQkQXDBIBBwMDBQkGBAEMAAcJAwMNAhIcE0BQUhIKE0NBQkREV0JTFBwSRlJUFAoSV1FBQkRERFYXGhJAVVkXDBJrAAQZBwcAHQMZBhwAHQZoFBwSW10XDAEcE1RGFAoSAQNQBQIDBQMEDwBRAlFUBFYGVFRQAwgECVUDU1YEVwEXGhJeQRUPFFlgWVhbUxIcE0MXDAEGBQEGDwYFBw8BBwgcE11eFAoSBFRQBwkEAw4NDgRTBQEFDwhRVQJUBVQDAwRXBwlWUgAXGhJWQVUXDBISHRVbQBIKE3ZFRlxVEXRaW0BFRVJHGhB5X1QbFBwSX1ZDFAoSAAECDgQBExsXRVNCEw1uAQAAHQMFBm0cE0VaFAprE15lXl9eVA4ZBBIcE156ZRIcEwYGGAISHRUEBh4BHwYXGhIBBwANAgESHRUAVVUBCAMHDwgIBVQBAAAJCVZRA1EDVQQHBVIBCFFWARIcE1YXaxwSWFhUFAoSV1FTUFZWRUMXGhJRWxUPFEUSHRVWXxIKE0AGGAIeBRUZFFNWbkEXDBIAAxUZFFJUEw0XRFFeVVhYCwcFCQQEAQEEExsXW1oSC2wEGgAcAWoZFFJcXlAXDBIBBwMDBQkGBAEMAAcJTwYGXwZ3SFtyAVgCAQNQBQIDBQMEDwBRAlFUBFYGVFRQAwgECVUDU1YEVwFLTxwBT0lLdE5jc3lnYWJ1fnFwZ3N4cFhsdEhTVHJZd2NzY3VXc0gIYm9ec2FzWXJicVh2d3J0f2VzVnpzdWJ1UnJjcGVSWmJmdWJ9cnZdc2l2dHJhdXJfZH9NUlJhWXJ%2Bc2F9VHZ0f3FxSXpQc1x5ZnN3c2RkRgoISAFXVwYAU0YSHRVYRVcSCxUXSw%3D%3D~12cx39i"', 3 | ] 4 | if (process.env.logs) { 5 | if (process.env.logs.indexOf('\n') > -1) { 6 | 7 | logs = process.env.logs.split('\n'); 8 | } else { 9 | logs = process.env.logs.split(); 10 | } 11 | } 12 | for (let i = 0; i < logs.length; i++) { 13 | const index = (i + 1 === 1) ? '' : (i + 1); 14 | exports['logs' + index] = logs[i]; 15 | } 16 | -------------------------------------------------------------------------------- /ts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jd", 3 | "version": "1.0.0", 4 | "description": "{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}", 5 | "main": "AlipayManor.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "" 12 | }, 13 | "keywords": [ 14 | "JD" 15 | ], 16 | "author": "", 17 | "license": "ISC", 18 | "dependencies": { 19 | "@types/node": "^16.3.0", 20 | "axios": "^0.21.1", 21 | "crypto-js": "^4.0.0", 22 | "date-fns": "^2.22.1", 23 | "dotenv": "^10.0.0", 24 | "download": "^8.0.0", 25 | "got": "^11.5.1", 26 | "http-server": "^0.12.3", 27 | "png-js": "^1.0.0", 28 | "qrcode-terminal": "^0.12.0", 29 | "request": "^2.88.2", 30 | "tough-cookie": "^4.0.0", 31 | "ts-md5": "^1.2.9", 32 | "tslib": "^2.3.0", 33 | "tunnel": "0.0.6", 34 | "ws": "^7.4.3" 35 | } 36 | } -------------------------------------------------------------------------------- /utils/DreamFactoryShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 京喜工厂互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let shareCodes = [ 10 | 'AXDgNYKNLs51h24hm7ZK-w==@2pMYXE95BIkCIGcO6UzTpQ==@DgHnSIl_Xks49TJjxzo7nw==@UO68abNzUTGatLzR4Z4RTg==@xJctChTp3ru2blH_WwFopg==@W2y011egxw55xNDYP8Xpww==@NRjbnfYENRVL9QSnLZZNrA==@dmgVOhr4JdUp1CG78ohkWw==@6nURqZ5tze71d9TbZGQg3Q==',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | 'AXDgNYKNLs51h24hm7ZK-w==@2pMYXE95BIkCIGcO6UzTpQ==@DgHnSIl_Xks49TJjxzo7nw==@UO68abNzUTGatLzR4Z4RTg==@xJctChTp3ru2blH_WwFopg==@W2y011egxw55xNDYP8Xpww==@NRjbnfYENRVL9QSnLZZNrA==@dmgVOhr4JdUp1CG78ohkWw==@6nURqZ5tze71d9TbZGQg3Q==',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | 14 | // 从日志获取互助码 15 | // const logShareCodes = require('./utils/jdShareCodes'); 16 | // if (logShareCodes.DREAM_FACTORY_SHARE_CODES.length > 0 && !process.env.DREAM_FACTORY_SHARE_CODES) { 17 | // process.env.DREAM_FACTORY_SHARE_CODES = logShareCodes.DREAM_FACTORY_SHARE_CODES.join('&'); 18 | // } 19 | 20 | // 判断环境变量里面是否有京喜工厂互助码 21 | if (process.env.DREAM_FACTORY_SHARE_CODES) { 22 | if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('&') > -1) { 23 | console.log(`您的互助码选择的是用&隔开\n`) 24 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('&'); 25 | } else if (process.env.DREAM_FACTORY_SHARE_CODES.indexOf('\n') > -1) { 26 | console.log(`您的互助码选择的是用换行隔开\n`) 27 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split('\n'); 28 | } else { 29 | shareCodes = process.env.DREAM_FACTORY_SHARE_CODES.split(); 30 | } 31 | } else { 32 | console.log(`由于您环境变量(DREAM_FACTORY_SHARE_CODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 33 | } 34 | for (let i = 0; i < shareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['shareCodes' + index] = shareCodes[i]; 37 | } 38 | -------------------------------------------------------------------------------- /utils/FactoryShareCodes.js: -------------------------------------------------------------------------------- 1 | /* 2 | 东东工厂互助码 3 | 此文件为Node.js专用。其他用户请忽略 4 | 支持京东N个账号 5 | */ 6 | //云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 7 | // 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 8 | // 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 9 | let shareCodes = [ 10 | '',//账号一的好友shareCode,不同好友中间用@符号隔开 11 | '',//账号二的好友shareCode,不同好友中间用@符号隔开 12 | ] 13 | 14 | // 从日志获取互助码 15 | // const logShareCodes = require('./utils/jdShareCodes'); 16 | // if (logShareCodes.DDFACTORY_SHARECODES.length > 0 && !process.env.DDFACTORY_SHARECODES) { 17 | // process.env.DDFACTORY_SHARECODES = logShareCodes.DDFACTORY_SHARECODES.join('&'); 18 | // } 19 | 20 | // 判断环境变量里面是否有东东工厂互助码 21 | if (process.env.DDFACTORY_SHARECODES) { 22 | if (process.env.DDFACTORY_SHARECODES.indexOf('&') > -1) { 23 | console.log(`您的互助码选择的是用&隔开\n`) 24 | shareCodes = process.env.DDFACTORY_SHARECODES.split('&'); 25 | } else if (process.env.DDFACTORY_SHARECODES.indexOf('\n') > -1) { 26 | console.log(`您的互助码选择的是用换行隔开\n`) 27 | shareCodes = process.env.DDFACTORY_SHARECODES.split('\n'); 28 | } else { 29 | shareCodes = process.env.DDFACTORY_SHARECODES.split(); 30 | } 31 | } else { 32 | console.log(`由于您环境变量(DDFACTORY_SHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) 33 | } 34 | for (let i = 0; i < shareCodes.length; i++) { 35 | const index = (i + 1 === 1) ? '' : (i + 1); 36 | exports['shareCodes' + index] = shareCodes[i]; 37 | } -------------------------------------------------------------------------------- /utils/MoveMentFaker.js: -------------------------------------------------------------------------------- 1 | const https = require('https'); 2 | const fs = require('fs/promises'); 3 | const { R_OK } = require('fs').constants; 4 | const vm = require('vm'); 5 | const UA = require('../USER_AGENTS.js').USER_AGENT; 6 | 7 | const URL = 'https://wbbny.m.jd.com/babelDiy/Zeus/2rtpffK8wqNyPBH6wyUDuBKoAbCt/index.html'; 8 | // const REG_MODULE = /(\d+)\:function\(.*(?=smashUtils\.get_risk_result)/gm; 9 | const SYNTAX_MODULE = '!function(n){var r={};function o(e){if(r[e])'; 10 | const REG_SCRIPT = /