diff --git a/Conf/Qinglong/config.sample.sh b/Conf/Qinglong/config.sample.sh index 6234b14..85aee6f 100644 --- a/Conf/Qinglong/config.sample.sh +++ b/Conf/Qinglong/config.sample.sh @@ -164,21 +164,21 @@ var_name=( ## 所有有互助码的活动,把脚本名称列在 name_js 中,对应 config.sh 中互助码后缀列在 name_config 中,中文名称列在 name_chinese 中。 ## name_js、name_config 和 name_chinese 中的三个名称必须一一对应。 name_js=( - panghu999_jd_scripts_jd_fruit - panghu999_jd_scripts_jd_pet - panghu999_jd_scripts_jd_plantBean - panghu999_jd_scripts_jd_dreamFactory - panghu999_jd_scripts_jd_jdfactory - panghu999_jd_scripts_jd_jdzz - panghu999_jd_scripts_jd_crazy_joy - panghu999_jd_scripts_jd_jxnc - panghu999_jd_scripts_jd_bookshop - panghu999_jd_scripts_jd_cash - panghu999_jd_scripts_jd_sgmh - panghu999_jd_scripts_jd_cfd - panghu999_jd_scripts_jd_health - panghu999_jd_scripts_jd_carnivalcity - panghu999_jd_scripts_jd_zoo + JDHelloWorld_jd_scripts_jd_fruit + JDHelloWorld_jd_scripts_jd_pet + JDHelloWorld_jd_scripts_jd_plantBean + JDHelloWorld_jd_scripts_jd_dreamFactory + JDHelloWorld_jd_scripts_jd_jdfactory + JDHelloWorld_jd_scripts_jd_jdzz + JDHelloWorld_jd_scripts_jd_crazy_joy + JDHelloWorld_jd_scripts_jd_jxnc + JDHelloWorld_jd_scripts_jd_bookshop + JDHelloWorld_jd_scripts_jd_cash + JDHelloWorld_jd_scripts_jd_sgmh + JDHelloWorld_jd_scripts_jd_cfd + JDHelloWorld_jd_scripts_jd_health + JDHelloWorld_jd_scripts_jd_carnivalcity + JDHelloWorld_jd_scripts_jd_zoo ) name_config=( Fruit @@ -427,6 +427,9 @@ export dd_thread="30" export starttime="23:59:59.00000000" ### 结束时间 export endtime="00:00:30.00000000" +## 抢京豆 +### ck 优先读取【JDCookies.txt】 文件内的ck 再到 ENV的 变量 JD_COOKIE='ck1&ck2' 最后才到脚本内 cookies=ck +qjd_zlzh = ['Your JD_User', '买买买', '东哥'] # Wenmoux 部分环境变量 ## QQ星系牧场自动兑换20豆 diff --git a/Conf/Readme.md b/Conf/Readme.md index 03e5279..a12c834 100644 --- a/Conf/Readme.md +++ b/Conf/Readme.md @@ -393,6 +393,12 @@ export starttime="23:59:59.00000000" export endtime="00:00:30.00000000" ``` +``` +## 抢京豆 +### ck 优先读取【JDCookies.txt】 文件内的ck 再到 ENV的 变量 JD_COOKIE='ck1&ck2' 最后才到脚本内 cookies=ck +qjd_zlzh=['Your JD_User', '买买买', '东哥'] +``` + ## Wenmoux 部分环境变量 diff --git a/Scripts/js/jx_cfdtx.js b/Scripts/js/jx_cfdtx.js new file mode 100644 index 0000000..2d383be --- /dev/null +++ b/Scripts/js/jx_cfdtx.js @@ -0,0 +1,185 @@ +/** +* + Name:财富岛提现 (修改自https://raw.githubusercontent.com/pxylen/dog_jd/master/jx_cfdtx.js) + Address: 京喜App ====>>>> 全民赚大钱 + + * 获取京喜tokens方式 + * 打开京喜农场,手动完成任意任务,必须完成任务领到水滴,提示获取cookie成功 + * 打开京喜工厂,收取电力,提示获取cookie成功 + * 打开京喜财富岛,手动成功提现一次,提示获取cookie成功 + * 手动任意完成,提示获取cookie成功即可,然后退出跑任务脚本 + + hostname = wq.jd.com, m.jingxi.com + + # quanx + [rewrite_local] + ^https\:\/\/wq\.jd\.com\/cubeactive\/farm\/dotask url script-request-header https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js + ^https\:\/\/m\.jingxi\.com\/dreamfactory\/generator\/CollectCurrentElectricity url script-request-header https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js + ^https\:\/\/m\.jingxi\.com\/jxcfd\/consume\/CashOut url script-request-header https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js + + # loon + [Script] + http-request ^https\:\/\/wq\.jd\.com\/cubeactive\/farm\/dotask script-path=https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js, requires-body=false, timeout=10, tag=京喜token + http-request ^https\:\/\/m\.jingxi\.com\/dreamfactory\/generator\/CollectCurrentElectricity script-path=https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js, requires-body=false, timeout=10, tag=京喜token + http-request ^^https\:\/\/m\.jingxi\.com\/jxcfd\/consume\/CashOut script-path=https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js, requires-body=false, timeout=10, tag=京喜token + + # surge + [Script] + 京喜token = type=http-request,pattern=^https\:\/\/wq\.jd\.com\/cubeactive\/farm\/dotask,requires-body=0,max-size=0,script-path=https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js + 京喜token = type=http-request,pattern=^https\:\/\/m\.jingxi\.com\/dreamfactory\/generator\/CollectCurrentElectricity,requires-body=0,max-size=0,script-path=https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js + 京喜token = type=http-request,pattern=^https\:\/\/m\.jingxi\.com\/jxcfd\/consume\/CashOut,requires-body=0,max-size=0,script-path=https://raw.githubusercontent.com/whyour/hundun/master/quanx/jx_tokens.js + +* +**/ + +const $ = new Env("京喜财富岛提现"); +const JD_API_HOST = "https://m.jingxi.com/"; +const jdCookieNode = $.isNode() ? require("./jdCookie.js") : ""; +const jdTokenNode = $.isNode() ? require('./jdJxncTokens.js') : ''; +$.cookieArr = []; +$.tokenArr = []; +let concurrency = 9 // 并发数 + +!(async () => { + if (!getCookies()) return; + if (!getTokens()) return; + let execAcList = getExecAcList() + let msgInfo = [] + let retry = false; + do { + for (let arr of execAcList) { + let allAc = arr.map(ac => ac.no).join(', ') + $.log(`\n=======================================\n开始【${$.name}账号:${allAc}】`) + let rtList = await Promise.all(arr.map((ac, i) => cashOut(ac, i))) + msgInfo.push(rtList.map(ac => `【账号${ac.no}】${ac.tk['pin']||''}${ac.result?'\n\t'+ac.result:''}`).join('\n\n')) + } + retry = ['23:59:59','00:00:00'].includes($.time('HH:mm:ss')) + if (retry) { + await $.wait(100) + } + } while(retry); + if (msgInfo.length <= 0) { + msgInfo.push(`暂无京喜token数据,请抓取后再试`) + } + $.msg($.name, '', msgInfo.join('\n\n')) +})() + .catch((e) => $.logErr(e)) + .finally(() => $.done()); + +function getExecAcList() { + let acList = [] + for (let i = 0; i < $.tokenArr.length; i++) { + let tk = $.tokenArr[i] || {}; + let hitCks = $.cookieArr.filter(ck => ck && decodeURIComponent((ck.match(/pt_pin=(.+?);/) || ['', ''])[1]) == tk['pin']); + if (hitCks && hitCks.length > 0) { + acList.push({ + no: i + 1, + tk, + ck: hitCks[0] + }) + } + } + let execAcList = [] + let len = acList.length + // 计算分组后每组账号个数 + let slot = len % concurrency == 0 ? len / concurrency : parseInt(len / concurrency) + 1 + slot = Math.ceil(len / (slot || 1)) + let idx = -1 + acList.forEach((o, i) => { + if (i % slot == 0) { + idx++ + } + if (execAcList[idx]) { + execAcList[idx].push(o) + } else { + execAcList[idx] = [o] + } + }) + $.log(`----------- 共${len}个账号分${execAcList.length}组去执行 -----------`) + return execAcList +} + +function cashOut(ac, i) { + return new Promise(async (resolve) => { + await $.wait(i * 30) + $.get( + taskUrl( + `consume/CashOut`, + `ddwMoney=100&dwIsCreateToken=0&ddwMinPaperMoney=150000&strPgtimestamp=${ac.tk['timestamp']}&strPhoneID=${ac.tk['phoneid']}&strPgUUNum=${ac.tk['farm_jstoken']}`, + ac.ck + ), + async (err, resp, data) => { + try { + if (err) { + $.logErr(`❌ 账号${ac.no} API请求失败,请检查网络后重试\n data: ${JSON.stringify(err, null, 2)}`); + } else { + let sErrMsg = $.toObj(data, {sErrMsg: '转换提现结果异常'})['sErrMsg']; + ac.result = sErrMsg == "" ? "今天手气太棒了" : sErrMsg; + } + } catch (e) { + $.logErr(`======== 账号 ${ac.no} ========\nerror:${e}\ndata: ${resp && resp.body}`) + } finally { + resolve(ac); + } + } + ); + }); +} + +function taskUrl(function_path, body, ck) { + return { + url: `${JD_API_HOST}jxcfd/${function_path}?strZone=jxcfd&bizCode=jxcfd&source=jxcfd&dwEnv=7&_cfd_t=${Date.now()}&ptag=&${body}&_stk=_cfd_t%2CbizCode%2CddwMinPaperMoney%2CddwMoney%2CdwEnv%2CdwIsCreateToken%2Cptag%2Csource%2CstrPgUUNum%2CstrPgtimestamp%2CstrPhoneID%2CstrZone&_ste=1&_=${Date.now()}&sceneval=2&g_login_type=1&g_ty=ls`, + headers: { + Cookie: ck, + Accept: "*/*", + Connection: "keep-alive", + Referer:"https://st.jingxi.com/fortune_island/cash.html?jxsid=16115391812299482601&_f_i_jxapp=1", + "Accept-Encoding": "gzip, deflate, br", + Host: "m.jingxi.com", + "User-Agent":"jdpingou;iPhone;4.1.4;14.3;9f08e3faf2c0b4e72900552400dfad2e7b2273ba;network/wifi;model/iPhone11,6;appBuild/100415;ADID/00000000-0000-0000-0000-000000000000;supportApplePay/1;hasUPPay/0;pushNoticeIsOpen/0;hasOCPay/0;supportBestPay/0;session/428;pap/JA2019_3111789;brand/apple;supportJDSHWK/1;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", + "Accept-Language": "zh-cn", + }, + }; +} + +function getCookies() { + if ($.isNode()) { + $.cookieArr = Object.values(jdCookieNode); + } else { + const CookiesJd = JSON.parse($.getdata("CookiesJD") || "[]").filter(x => !!x).map(x => x.cookie); + $.cookieArr = [$.getdata("CookieJD") || "", $.getdata("CookieJD2") || "", ...CookiesJd]; + } + if (!$.cookieArr[0]) { + $.msg( + $.name, + "【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取", + "https://bean.m.jd.com/", + { + "open-url": "https://bean.m.jd.com/", + } + ); + return false; + } + return true; +} + +function getTokens() { + if ($.isNode()) { + Object.keys(jdTokenNode).forEach((item) => { + $.tokenArr.push(jdTokenNode[item] ? JSON.parse(jdTokenNode[item]) : '{}'); + }) + } else { + $.tokenArr = JSON.parse($.getdata('jx_tokens') || '[]'); + } + if (!$.tokenArr[0]) { + $.msg( + $.name, + "【⏰提示】请先获取京喜Token\n获取方式见脚本说明" + ); + return false; + } + return true; +} + +// prettier-ignore +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,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("",`\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 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("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,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),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){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="",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=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];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("",`\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)} diff --git a/Scripts/js/youthread_elecV2.js b/Scripts/js/youthread_elecV2.js new file mode 100644 index 0000000..ca1ce51 --- /dev/null +++ b/Scripts/js/youthread_elecV2.js @@ -0,0 +1,176 @@ +/* +更新时间: 2021-02-16 15:00 +Github Actions使用方法见[@lxk0301](https://raw.githubusercontent.com/lxk0301/scripts/master/githubAction.md) 使用方法大同小异 + +请自行抓包,阅读文章和看视频,倒计时转一圈显示青豆到账即可,多看几篇文章和视频,获得更多包数据,抓包地址为"https://ios.baertt.com/v5/article/complete.json",在Github Actions中的Secrets新建name为'YOUTH_READ'的一个值,拷贝抓包的请求体到下面Value的文本框中,添加的请求体越多,获得青豆次数越多,本脚本不包含任何推送通知 + +多个请求体时用'&'号或者换行隔开" ‼️ + +*/ + +const $ = new Env("中青看点阅读") +//const notify = $.isNode() ? require('./sendNotify') : ''; +let ReadArr = [], timebodyVal =""; +let YouthBody = $.getdata('youth_autoread')||$.getdata("zqgetbody_body"); +let artsnum = 0, videosnum = 0; +let videoscore = 0,readscore = 0; +if (isGetbody = typeof $request !==`undefined`) { + Getbody(); + $done() +} +let lastIndex = $.getdata('zqbody_index') +if(!$.isNode()&&!YouthBody==true){ + $.log("您未获取阅读请求,请求阅读后获取") + $.msg($.name, "您未获取阅读请求,请求阅读后获取","",{'open-url':"https://kandian.youth.cn/u/8S9DO"}) + } else if (!$.isNode() && YouthBody.indexOf("&") == -1) { + ReadArr.push(YouthBody) + } else { + if ($.isNode()) { + if (process.env.YOUTH_READ && process.env.YOUTH_READ.indexOf('&') > -1) { + YouthBody = process.env.YOUTH_READ.split('&'); + console.log(`您选择的是用"&"隔开\n`) + } else if (process.env.YOUTH_READ && process.env.YOUTH_READ.indexOf('\n') > -1) { + YouthBody = process.env.YOUTH_READ.split('\n'); + console.log(`您选择的是用换行隔开\n`) + } else { + YouthBody = [process.env.YOUTH_READ] + } + } else if (!$.isNode() && YouthBody.indexOf("&") > -1) { + YouthBody = YouthBody.split("&") + }; + Object.keys(YouthBody).forEach((item) =>{ + if (YouthBody[item]) { + ReadArr.push(YouthBody[item]) + } + }) + timeZone = new Date().getTimezoneOffset() / 60; + timestamp = Date.now()+ (8+timeZone) * 60 * 60 * 1000; + bjTime = new Date(timestamp).toLocaleString('zh',{hour12:false,timeZoneName: 'long'}); + console.log(`\n === 脚本执行 ${bjTime} ===\n`); + $.log("\n 您共获取"+ReadArr.length+"次阅读请求,任务开始\n") +} + + !(async () => { + if (!ReadArr[0]) { + console.log($.name, '【提示】请把抓包的请求体填入Github 的 Secrets 中,请以&隔开') + return; + } + +let indexLast = $.getdata('zqbody_index'); + $.begin = indexLast ? parseInt(indexLast,10) : 1; + $.index = 0; + $.log( "上次运行到第"+$.begin+"次终止,本次从"+(parseInt($.begin)+1)+"次开始"); + for ( var i = indexLast ? indexLast:0; i < ReadArr.length; i++) { + if (ReadArr[i]) { + articlebody = ReadArr[i]; + $.index = $.index + 1; + $.log(`-------------------------\n\n开始中青看点第${$.index}次阅读`); + await $.wait(10000); + await AutoRead(); + }; + } + $.log("本次共阅读"+artsnum+"次资讯,共获得"+readscore+"青豆\n观看"+videosnum+"次视频,获得"+videoscore+"青豆(不含0青豆次数)\n") + console.log(`-------------------------\n\n中青看点共完成${$.index}次阅读,共计获得${readscore+videoscore}个青豆,阅读请求全部结束`); + $.msg($.name, `本次运行共完成${$.index}次阅读,共计获得${readscore+videoscore}个青豆`) +})() + .catch((e) => $.logErr(e)) + .finally(() => $.done()) + + +function AutoRead() { + return new Promise((resolve, reject) =>{ + $.post(batHost('article/complete.json', articlebody), async(error, response, data) =>{ + let readres = JSON.parse(data); + // $.log(JSON.stringify(readres,null,2)) + $.begin=$.begin+1; + let res=$.begin%ReadArr.length + $.setdata(res+"", 'zqbody_index'); + if (readres.error_code == '0' && data.indexOf("read_score") > -1 && readres.items.read_score > 0) { + console.log(`\n本次阅读获得${readres.items.read_score}个青豆,请等待30s后执行下一次阅读\n`); + if(data.indexOf("ctype")>-1){ + if(readres.items.ctype==0){ + artsnum += 1 + readscore += parseInt(readres.items.read_score); + } else if(readres.items.ctype==3){ + videosnum += 1 + videoscore += parseInt(readres.items.read_score); + } + } + if ($.index % 2 == 0) { + if ($.isNode() && process.env.YOUTH_ATIME) { + timebodyVal = process.env.YOUTH_ATIME; + } else { + timebodyVal = $.getdata('autotime_zq'); + } + await readTime() + }; + if($.index==ReadArr.length){ + $.log($.index+"次任务已全部完成,即将结束") + } else { + await $.wait(20000); + } + } else if (readres.error_code == '0' && data.indexOf('"score":0') > -1 && readres.items.score == 0) { + console.log(`\n本次阅读获得0个青豆,等待10s即将开始下次阅读\n`); + } else if (readres.success == false) { + console.log(`第${$.index}次阅读请求有误,请删除此请求`) + } else if (readres.items.max_notice == '\u770b\u592a\u4e45\u4e86\uff0c\u63621\u7bc7\u8bd5\u8bd5') { + console.log(readres.items.max_notice) + } + resolve() + }) + }) +} + +function batHost(api, body) { + return { + url: 'https://ios.baertt.com/v5/'+api, + headers: { + 'User-Agent': 'KDApp/2.0.0 (iPhone; iOS 14.5; Scale/3.00)', + 'Host': 'ios.baertt.com', + 'Content-Type': 'application/x-www-form-urlencoded' + }, + body: body + } +} + +function readTime() { + return new Promise((resolve, reject) => { + $.post(batHost('user/stay.json',timebodyVal), (error, resp, data) => { + let timeres = JSON.parse(data) + if (timeres.error_code == 0) { + readtimes = timeres.time / 60 + $.log(`阅读时长共计` + Math.floor(readtimes) + `分钟`) + } + resolve() + }) + }) +} + +function Getbody() { + if ($request && $request.method != `OPTIONS` && $request.url.match(/\/article\/info\/get/)) { + bodyVal = $request.url.split("?")[1]; + if (YouthBody) { + if (YouthBody.indexOf(bodyVal) > -1) { + $.log("此阅读请求已存在,本次跳过") + } else if (YouthBody.indexOf(bodyVal) == -1) { + YouthBodys = YouthBody + "&" + bodyVal; + $.setdata(YouthBodys, 'youth_autoread'); + $.log(`${$.name}获取阅读: 成功, YouthBodys: ${bodyVal}`); + bodys = YouthBodys.split("&") + $.msg($.name, "获取第"+bodys.length+"个阅读请求: 成功🎉", ``) + } + } else { + $.setdata(bodyVal, 'youth_autoread'); + $.log(`${$.name}获取阅读: 成功, YouthBodys: ${bodyVal}`); + $.msg($.name, `获取第一个阅读请求: 成功🎉`, ``) + } + } else if($request&&$request.method!=`OPTIONS`&&$request.url.match(/\/v5\/user\/stay/)){ + const timebodyVal=$request.body; + if(timebodyVal) $.setdata(timebodyVal,'autotime_zq'); + $.log(`${$.name}获取阅读时长: 成功, timebodyVal: ${timebodyVal}`); + $.msg($.name,`获取阅读时长: 成功🎉`,``) + } +} + + +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,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("",`\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 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("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,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),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();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){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="",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}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));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)} \ No newline at end of file diff --git a/Scripts/sh/Helpcode2.8/Doc.txt b/Scripts/sh/Helpcode2.8/Doc.txt new file mode 100644 index 0000000..d616d83 --- /dev/null +++ b/Scripts/sh/Helpcode2.8/Doc.txt @@ -0,0 +1,42 @@ +[ ļ : code.sh ] +2021.7.3.004 +1޸¾ϲƸűܲ⡣ +2Զ޸еjd_cfd.jsָϲtoken + +2021.7.3.003 +1 pt_pin У龩ϲtoken + +2021.7.2.002 - 2021.7.3.001 +1˾ϲũ Token ĸʽھϲƸ֡µ task_before.sh ģһʹá +л EmmieDempsey ṩ˼· + +ʹ÷µ task_before.sh ģһ code.shٸ־ʾȲֿ⣬һξϲƸűһ code.sh + +⣺ +1) task_before.sh Token ǿֵ +𣺱һȲֿľϲƸű code.sh Token ܻ޷дд벻 +2) task_before.sh Token дǾϲƸֻǶȡ Token +𣺢ȷ task_before.sh °棬Աȶļöģĵ Build š + ھϲƸ conc JD_COOKIE ̣߳ᵼ Token ȡ쳣 + +2Ӿϲũ Token Ϊյԭʾ + +2021.7.2.001 +1Ľģʽűġ + +[ ļ : task_before.sh ] +2021.7.3 +1 config.sh ģʱij COOKIES μijʵӦܡ + +2021.7.2 +1˾ϲũ Token ԭʼģ塣ھϲƸ֡ + +[ ļ : config_sample.sh ] +config.shģ壬 2.8.0Oreoе» + +ijCOOKIESμijĸʽձģд + +бȽģԼconfig.shҪõı뵽Լconfig.sh + +Ƶhttps://t.me/update_help +Ⱥhttps://t.me/update_help_group \ No newline at end of file diff --git a/Scripts/sh/Helpcode2.8/Updatelog.txt b/Scripts/sh/Helpcode2.8/Updatelog.txt new file mode 100644 index 0000000..d30b22e --- /dev/null +++ b/Scripts/sh/Helpcode2.8/Updatelog.txt @@ -0,0 +1,52 @@ +־ + +2021.7.3.004 +1޸¾ϲƸűܲ⡣ +2Զ޸еjd_cfd.jsָϲtoken + +2021.7.3.003 +1 pt_pin У龩ϲtoken + +2021.7.2.002 - 2021.7.3.001 +1˾ϲũ Token ĸʽھϲƸ֡µ task_before.sh ģһʹá򣬾ϲƸֻʶ𲻵 token +л EmmieDempsey ṩ˼· + +ʹ÷µ task_before.sh ģһ code.shٸ־ʾȲֿ⣬һξϲƸűһ code.sh + +2Ӿϲũ Token Ϊյԭʾ + +2021.7.2.001 +1Ľģʽűġ + +2021.7.1 +1 code.sh ˺űʱ@ȱʧBUG +2ȡ task_before.sh ȶȡ code ־Ĵ롣 + +2021.6.30 +1˺űԶ幦ܡε˺Կ˺š + +2021.6.29 +1ģʽ˵ COOKIES жϺʾ + +2021.6.27 +1Ѹ¶ckĶȡcode.shtask_before.shȡ԰ոckԤ docker exec -it qinglong ql update κ code.sh + +2021.6.26 +1ƲֿԴĽűԶ壻 +2޸˸д task_before.sh űIJִ룺ȡ code.sh ־ʱ code.sh дϢ task_before.sh BUG +3˵ģʽ +4֧ task_before.shݹܡ·config/bak/ +5ϸĶȡ롢ʽд + +2021.6.25 ڶ +1 ʣֻά lxk0301 ֿ⣬ȼ˳Ϊʣֻ> JDHelloWorld > lxk0301; +2Ӻ̨ code.sh ߳жֹ߳࣬ͣнű⻥͹ִ + +2021.6.25 +1ԶжǷ JDHelloWorld lxk0301 Ļű־ȡ롣ʾ˳С + +2021.6.24 +1upcodes.sh ϲ code.sh + +2021.6.23 +1淢 \ No newline at end of file diff --git a/Scripts/sh/Helpcode2.8/Usage.txt b/Scripts/sh/Helpcode2.8/Usage.txt new file mode 100644 index 0000000..cd08282 --- /dev/null +++ b/Scripts/sh/Helpcode2.8/Usage.txt @@ -0,0 +1,85 @@ +ʹ÷ + +code.sh ǻ 2.2.0 code.sh ޸Ķֻ֧ 2.8.0 ϡֻ֧ģ޸ģֻ֧ʾȡ +Ҫԭ +a) code.shз׶Σ +1һ׶ΣӸű־룬 COOKIES УԺѡĻģ壬ɶӦĻĻͻ code.sh ־·/ql/log/code/ + +2ڶ׶Σȡ code.sh ־ task_before.sh Уÿһͻݣݲһ£Զд task_before.sh Ļ򡣵 code.sh ־лǿֵ undefined ǿֵʱд task_before.sh ӦĻͻ + +b) ЩűĻ벻ȫ10˺ţĿǰһ룬־ֻ5ô code.sh Ҳֻ5л룬5ֵ + code.sh 治Ὣ־лͻĿֵ undefined дtask_before.sh code.sh ܵôԽ࣬task_before.sh ĻͻԽ + +һ廥Զ¼񡣿Զȡµĸʽ־Զ task_before.sh еĻ롣 +1 code.sh ű·/ql/config/ +עǰûù task_before.sh űʹøṩijʼģļ·Ҳ /ql/config/ǰù task_before.sh ͬģȶıһδ룬ύͻűȱʧܵ»쳣 + +2ʽ»Ķʱ +ƣʽ» +bash /ql/config/code.sh +ʱ*/60 * * * * + +3Ҫȡű־ܸʽĻ뼰ĿǰֿĽű־ȡȼ˳Ϊ +a)ʣֻά lxk0301 ֿ⣺ +ƣʣֻά lxk0301 ֿ +ql repo https://github.com/panghu999/jd_scripts.git "jd_|jx_|getJDCookie" "activity|backUp|Coupon|jd_try|format_" "^jd[^_]|USER" +ʱ34 8,12,16,20,0 * * * + +b)JDHelloWorld ά lxk0301 ֿ⣺ +ƣJDHelloWorld ά lxk0301 ֿ +ql repo https://github.com/JDHelloWorld/jd_scripts.git "jd_|jx_|getJDCookie" "activity|backUp|Coupon|enen" "^jd[^_]|USER" +ʱ32 8,12,16,20,0 * * * + +c)lxk0301 ֿ⣺ +ƣlxk0301 ֿ +ql repo https://github.com/chinnkarahoi/jd_scripts.git "jd_|jx_|getJDCookie" "activity|backUp|Coupon" "^jd[^_]|USER" +ʱ20 8,12,16,20,0 * * * + +4ϲũ Token ķ +a) ǰ᣺µ task_before.sh ģ壬ϲƸ޷ȡ token +b) 裺һ code.shٸ־ʾȲֿ⣬һξϲƸűһ code.sh +c⣺ +1) task_before.sh Token ǿֵ +𣺱һȲֿľϲƸű code.sh Token ܻ޷дд벻 +2) task_before.sh Token дǾϲƸֻǶȡ Token +𣺢ȷ task_before.sh °棬Աȶļöģĵ Build š + ھϲƸ conc JD_COOKIE ̣߳ᵼ Token ȡ쳣 + +ԶIJã +1Զ廥ģ嶨 +code.sh ĬϻΪȻģ塱ԼעͲ޸ģ壻 +## jcode űĻģʽѡ +## ʹá˳ģ塱Cookieǰ +## 0 ʹáȫһģ塱˻Ҫȫһ +## 1 ʹáȻģ塱˻һ +## 2 ʹá˳ģ塱׽ű˺ż˳ÿɵ˳򶼲һ¡ +HelpType="1" + +2ԶǷ޸ļ +## ǷԶļеĻͻĬΪ1ʾ£ջֵʾ¡ +UpdateType="1" + +3ֿԶ +ű߶£ +repo1='panghu999' +repo2='JDHelloWorld' +repo3='chinnkarahoi' +ҪϽűģ name_js ڽűǰ׺"repo"滻ָ"repo1" "repo2""repo3" +עеĽű־Ļı򲢲ͳһֻ߲롣ݲ֧еɶ塣㷢ֲֿ֧⣬뼰ʱϵ + +4Զ task_before.sh ļأĬ1ʾΪ0ʾرա· /ql/config/bak/ +BAKUP="1"; + +5Զָ˻ӰЩʺʺš code.sh ݣ + +6Ѽ⵽ code.shУ˵code.sh̹߳࣬ǿУܻᵼ»͹д쳣ǵһԡҪǿУ£ + +ǿз +޸config.sh +DEBUG="1" +־߳9 + +code.sh +$(ps | grep code.sh | grep -v grep | wc -l)" -gt 8 + +8ij9Ȼcode.shУôΪһơ \ No newline at end of file diff --git a/Scripts/sh/Helpcode2.8/code.sh b/Scripts/sh/Helpcode2.8/code.sh new file mode 100644 index 0000000..ec4ae51 --- /dev/null +++ b/Scripts/sh/Helpcode2.8/code.sh @@ -0,0 +1,516 @@ +#!/usr/bin/env bash + +#Build 20210703-004 + +## 导入通用变量与函数 +dir_shell=/ql/shell +. $dir_shell/share.sh + +## 判断仓库类别及日志存在与否 +repo1='panghu999' +repo2='JDHelloWorld' +repo3='chinnkarahoi' +if [ "$(ls $dir_log |grep panghu999_jd_scripts | wc -l)" -gt 0 ]; then + repo=$repo1 +elif [ "$(ls $dir_log |grep JDHelloWorld | wc -l)" -gt 0 ]; then + repo=$repo2 +elif [ "$(ls $dir_log |grep chinnkarahoi | wc -l)" -gt 0 ]; then + repo=$repo3 +else + repo='' +fi + +## 调试模式开关,默认是0,表示关闭;设置为1,表示开启 +DEBUG="1" + +## 备份配置文件开关,默认是1,表示开启;设置为0,表示关闭。备份路径 /ql/config/bak/ +BAKUP="1" + +## 定义 jcode 脚本导出的互助码模板样式(选填) +## 不填 使用“按编号顺序助力模板”,Cookie编号在前的优先助力 +## 填 0 使用“全部一致助力模板”,所有账户要助力的码全部一致 +## 填 1 使用“均等机会助力模板”,所有账户获得助力次数一致 +## 填 2 使用“随机顺序助力模板”,本套脚本内账号间随机顺序助力,每次生成的顺序都不一致。 +HelpType="1" + +## 定义屏蔽模式。被屏蔽的账号将不被助力,被屏蔽的账号仍然可以助力其他账号。 +## 设定值为 BreakHelpType="1" 表示启用屏蔽模式;不填或填其他内容表示不开启功能。 +## 自定义屏蔽账号序号或序号区间。当 BreakHelpType="1"时生效。 +## 设定值为一个或多个不相同正整数,每个正整数不大于账号总数;也可以设置正整数区间,最大正整数不大于账号总数; +## 如:a) 设定为 BreakHelpNum="3" 表示从第 3 个账号不被助力; +## b) 设定为 BreakHelpNum="5 7 8 10" 表示从第 5 7 8 10 个账号均不被助力; +## c) 设定为 BreakHelpNum="6-12" 表示从第 6 个账号到第 12 个账号均不被助力; +## d) 设定为 BreakHelpNum="4 9-14 15~18 19_21" 表示第4个账号、第9至14账号、第15至18账号、第19至21账号均不被助力。注意序号区间连接符仅支持 - ~ _; +## 不按示例填写可能引发报错。 +BreakHelpType="0" ## 屏蔽模式 +BreakHelpNum="4 9-14 15~18 19_21" ## 屏蔽账号序号或序号区间 + +## 定义是否自动更新配置文件中的互助码和互助规则,默认为1,表示更新;留空或其他数值表示不更新。 +UpdateType="1" + +## 需组合的环境变量列表,env_name需要和var_name一一对应,如何有新活动按照格式添加(不懂勿动) +env_name=( + FRUITSHARECODES + PETSHARECODES + PLANT_BEAN_SHARECODES + DREAM_FACTORY_SHARE_CODES + DDFACTORY_SHARECODES + JDJOY_SHARECODES + JDZZ_SHARECODES + JXNC_SHARECODES + BOOKSHOP_SHARECODES + JD_CASH_SHARECODES + JDSGMH_SHARECODES + JDCFD_SHARECODES + JDHEALTH_SHARECODES + JD818_SHARECODES + CITY_SHARECODES + JXNCTOKENS +) +var_name=( + ForOtherFruit + ForOtherPet + ForOtherBean + ForOtherDreamFactory + ForOtherJdFactory + ForOtherJoy + ForOtherJdzz + ForOtherJxnc + ForOtherBookShop + ForOtherCash + ForOtherSgmh + ForOtherCfd + ForOtherHealth + ForOtherCarni + ForOtherCity +) + +## name_js为脚本文件名,如果使用ql repo命令拉取,文件名含有作者名 +## 所有有互助码的活动,把脚本名称列在 name_js 中,对应 config.sh 中互助码后缀列在 name_config 中,中文名称列在 name_chinese 中。 +## name_js、name_config 和 name_chinese 中的三个名称必须一一对应。 +name_js=( + "$repo"_jd_scripts_jd_fruit + "$repo"_jd_scripts_jd_pet + "$repo"_jd_scripts_jd_plantBean + "$repo"_jd_scripts_jd_dreamFactory + "$repo"_jd_scripts_jd_jdfactory + "$repo"_jd_scripts_jd_crazy_joy + "$repo"_jd_scripts_jd_jdzz + "$repo"_jd_scripts_jd_jxnc + "$repo"_jd_scripts_jd_bookshop + "$repo"_jd_scripts_jd_cash + "$repo"_jd_scripts_jd_sgmh + "$repo"_jd_scripts_jd_cfd + "$repo"_jd_scripts_jd_health + "$repo"_jd_scripts_jd_carnivalcity + "$repo"_jd_scripts_jd_city +) + +name_config=( + Fruit + Pet + Bean + DreamFactory + JdFactory + Joy + Jdzz + Jxnc + BookShop + Cash + Sgmh + Cfd + Health + Carni + City +) + +name_chinese=( + 东东农场 + 东东萌宠 + 京东种豆得豆 + 京喜工厂 + 东东工厂 + crazyJoy任务 + 京东赚赚 + 京喜农场 + 口袋书店 + 签到领现金 + 闪购盲盒 + 京喜财富岛 + 东东健康社区 + 京东手机狂欢城 + 城城领现金 +) + +#仅输出互助码的环境变量 +name_js_only=( + "$repo"_jd_scripts_jd_cfd +) + +name_config_only=( + TokenJxnc +) + +name_chinese_only=( + 京喜token +) + +## 生成pt_pin清单 +gen_pt_pin_array() { + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + local tmp1 tmp2 i pt_pin_temp + for i in "${!array[@]}"; do + pt_pin_temp=$(echo ${array[i]} | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|; s|%|\\\x|g}") + [[ $pt_pin_temp == *\\x* ]] && pt_pin[i]=$(printf $pt_pin_temp) || pt_pin[i]=$pt_pin_temp + done +} + +## 导出互助码的通用程序,$1:去掉后缀的脚本名称,$2:config.sh中的后缀,$3:活动中文名称 +export_codes_sub() { + local task_name=$1 + local config_name=$2 + local chinese_name=$3 + local config_name_my=My$config_name + local config_name_for_other=ForOther$config_name + local i j k m n pt_pin_in_log code tmp_grep tmp_my_code tmp_for_other user_num random_num_list + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + local user_sum=${#array[*]} + if cd $dir_log/$task_name &>/dev/null && [[ $(ls) ]]; then + ## 寻找所有互助码以及对应的pt_pin + i=0 + pt_pin_in_log=() + code=() + pt_pin_and_code=$(ls -r *.log | xargs awk -v var="的$chinese_name好友互助码" 'BEGIN{FS="[( )】]+"; OFS="&"} $3~var {print $2,$4}') + for line in $pt_pin_and_code; do + pt_pin_in_log[i]=$(echo $line | awk -F "&" '{print $1}') + code[i]=$(echo $line | awk -F "&" '{print $2}') + let i++ + done + + ## 输出My系列变量 + if [[ ${#code[*]} -gt 0 ]]; then + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + tmp_my_code="" + j=$((m + 1)) + for ((n = 0; n < ${#code[*]}; n++)); do + if [[ ${pt_pin[m]} == ${pt_pin_in_log[n]} ]]; then + tmp_my_code=${code[n]} + break + fi + done + echo "$config_name_my$j='$tmp_my_code'" + done + else + echo "## 从日志中未找到任何互助码" + fi + + ## 输出ForOther系列变量 + if [[ ${#code[*]} -gt 0 ]]; then + echo + case $HelpType in + 0) ## 全部一致 + tmp_for_other="" + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + j=$((m + 1)) + tmp_for_other="$tmp_for_other@\${$config_name_my$j}" + done + echo "${config_name_for_other}1=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|" + for ((m = 1; m < ${#pt_pin[*]}; m++)); do + j=$((m + 1)) + echo "$config_name_for_other$j=\"\${${config_name_for_other}1}\"" + done + ;; + + 1) ## 均等助力 + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + tmp_for_other="" + j=$((m + 1)) + for ((n = $m; n < $(($user_sum + $m)); n++)); do + [[ $m -eq $n ]] && continue + if [[ $((n + 1)) -le $user_sum ]]; then + k=$((n + 1)) + else + k=$((n + 1 - $user_sum)) + fi + tmp_for_other="$tmp_for_other@\${$config_name_my$k}" + done + echo "$config_name_for_other$j=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|" + done + ;; + + 2) ## 本套脚本内账号间随机顺序助力 + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + tmp_for_other="" + random_num_list=$(seq $user_sum | sort -R) + j=$((m + 1)) + for n in $random_num_list; do + [[ $j -eq $n ]] && continue + tmp_for_other="$tmp_for_other@\${$config_name_my$n}" + done + echo "$config_name_for_other$j=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|" + done + ;; + + *) ## 按编号优先 + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + tmp_for_other="" + j=$((m + 1)) + for ((n = 0; n < ${#pt_pin[*]}; n++)); do + [[ $m -eq $n ]] && continue + k=$((n + 1)) + tmp_for_other="$tmp_for_other@\${$config_name_my$k}" + done + echo "$config_name_for_other$j=\"$tmp_for_other\"" | perl -pe "s|($config_name_for_other\d+=\")@|\1|" + done + ;; + esac + fi + else + echo "## 未运行过 $task_name.js 脚本,未产生日志" + fi +} + +## 汇总输出 +export_all_codes() { + gen_pt_pin_array + ps_num="$(ps | grep code.sh | grep -v grep | wc -l)" + [[ $DEBUG = "1" ]] && echo "# 当前 code.sh 的线程数量:$ps_num" + [[ $DEBUG = "1" ]] && echo -e "\n# 预设的 JD_COOKIE 数量:`echo $JD_COOKIE | grep -o 'pt_key' | wc -l`" + [[ $DEBUG = "1" ]] && echo -e "\n# 预设的 JD_COOKIE 环境变量数量:`echo $JD_COOKIE | sed 's/&/\n/g' | wc -l`" + [[ $DEBUG = "1" && "$(echo $JD_COOKIE | sed 's/&/\n/g' | wc -l)" = "1" && "$(echo $JD_COOKIE | grep -o 'pt_key' | wc -l)" -gt 1 ]] && echo -e "\n# 检测到您将多个 COOKIES 填写到单个环境变量值,请注意将各 COOKIES 采用 & 分隔,否则将无法完整输出互助码及互助规则!" + echo -e "\n# 从日志提取互助码,编号和配置文件中Cookie编号完全对应,如果为空就是所有日志中都没有。\n\n# 即使某个MyXxx变量未赋值,也可以将其变量名填在ForOtherXxx中,jtask脚本会自动过滤空值。\n" + echo -n "# 你选择的互助码模板为:" + case $HelpType in + 0) + echo "所有账号助力码全部一致。" + ;; + 1) + echo "所有账号机会均等助力。" + ;; + 2) + echo "本套脚本内账号间随机顺序助力。" + ;; + *) + echo "按账号编号优先。" + ;; + esac + if [ "$ps_num" -gt 8 ]; then + echo -e "\n# 检测到 code.sh 的线程过多 ,请稍后再试!" + exit + elif [ -z $repo ]; then + echo -e "\n# 未检测到兼容的活动脚本日志,无法读取互助码,退出!" + exit + else + echo -e "\n# 优先读取 $repo 的脚本日志,格式化导出互助码,生成互助规则!" + for ((i = 0; i < ${#name_js[*]}; i++)); do + echo -e "\n## ${name_chinese[i]}:" + export_codes_sub "${name_js[i]}" "${name_config[i]}" "${name_chinese[i]}" + done + for ((i = 0; i < ${#name_js_only[*]}; i++)); do + echo -e "\n## ${name_chinese_only[i]}:" + export_codes_sub_only "${name_js_only[i]}" "${name_config_only[i]}" "${name_chinese_only[i]}" + done + fi +} + +#更新配置文件中互助码的函数 +help_codes(){ +if [ -z "$(cat $file_task_before | grep "^My$1\d")" ]; then + echo "" >> $file_task_before + echo "My"$1"1=''" >> $file_task_before + echo "" >> $file_task_before +fi +local envs=$(eval echo "\$JD_COOKIE") +local array=($(echo $envs | sed 's/&/ /g')) +local user_sum=${#array[*]} +for ((i=1; i<=$user_sum; i++)); do + new_code="$(cat $code_log_newest | grep "^My$1$i=.*'$" | sed "s/.*'\(.*\)'.*/\1/")" + old_code="$(cat $file_task_before | grep "^My$1$i=.*'$" | sed "s/.*'\(.*\)'.*/\1/")" + if [ -z "$(grep "^My$1$i" $file_task_before)" ]; then + sed -i "/^My$1$[$i-1]='.*'/ s/$/\nMy$1$i=\'\'/" $file_task_before + fi + if [[ "$new_code" != "" ]] && [[ "$new_code" != "undefined" ]] && [[ "$new_code" != "{}" ]]; then + if [ "$new_code" != "$old_code" ]; then + sed -i "s/^My$1$i='$old_code'$/My$1$i='$new_code'/" $file_task_before + fi + fi + if [[ "$new_code" != "" ]] && [[ "$new_code" != "undefined" ]] && [[ "$new_code" != "{}" ]]; then + if [ "$new_code" != "$old_code" ]; then + sed -i "s/^My$1$i='$old_code'$/My$1$i='$new_code'/" $file_task_before + fi + fi +done +} + +help_codes_only(){ +if [ -z "$(cat $file_task_before | grep "^$1\d")" ]; then + echo "" >> $file_task_before + echo "$11=''" >> $file_task_before + echo "" >> $file_task_before +fi +local envs=$(eval echo "\$JD_COOKIE") +local array=($(echo $envs | sed 's/&/ /g')) +local user_sum=${#array[*]} +for ((i=1; i<=$user_sum; i++)); do + new_jxtoken="$(cat $code_log_newest | grep "^$1$i=.*'$" | sed "s/.*'\(.*\)'.*/\1/")" + old_jxtoken="$(cat $file_task_before | grep "^$1$i=.*'$" | sed "s/.*'\(.*\)'.*/\1/")" + if [ -z "$(grep "^$1$i" $file_task_before)" ]; then + sed -i "/^$1$[$i-1]='.*'/ s/$/\n$1$i=\'\'/" $file_task_before + fi + if [[ "$new_jxtoken" != "" ]] && [[ "$new_jxtoken" != "undefined" ]] && [[ "$new_jxtoken" != "{}" ]]; then + if [ "$new_jxtoken" != "$old_jxtoken" ]; then + sed -i "s/^$1$i='$old_jxtoken'$/$1$i='$new_jxtoken'/" $file_task_before + fi + fi +done +} + +#更新配置文件中互助规则的函数 +help_rules(){ +if [ -z "$(cat $file_task_before | grep "^ForOther$1\d")" ]; then + echo "ForOther"$1"1=\"\"" >> $file_task_before + echo "" >> $file_task_before +fi +local envs=$(eval echo "\$JD_COOKIE") +local array=($(echo $envs | sed 's/&/ /g')) +local user_sum=${#array[*]} +for ((i=1; i<=$user_sum; i++)); do + new_rule="$(cat $code_log_newest | grep "^ForOther$1$i=.*\"$" | sed "s/.*\"\(.*\)\".*/\1/")" + old_rule="$(cat $file_task_before | grep "^ForOther$1$i=.*\"$" | sed "s/.*\"\(.*\)\".*/\1/")" + if [ -z "$(grep "^ForOther$1$i" $file_task_before)" ]; then + sed -i "/^ForOther$1$[$i-1]=".*"/ s/$/\nForOther$1$i=\"\"/" $file_task_before + fi + if [ "$new_rule" != "" ]; then + if [ "$new_rule" != "$old_rule" ]; then + sed -i "s/^ForOther$1$i=\"$old_rule\"$/ForOther$1$i=\"$new_rule\"/" $file_task_before + fi + fi +done +} + +export_codes_sub_only(){ +if [ "$(cat $dir_scripts/"$repo"_jd_scripts_jd_cfd.js | grep "// console.log(\`token")" != "" ]; then + echo -e "\n# 正在修改 "$repo"_jd_scripts_jd_cfd.js ,待完全运行 "$repo"_jd_scripts_jd_cfd.js 后即可输出 token !" +fi +sed -i 's/.*\(c.*log\).*\(${JSON.*token)}\).*/ \1(\`\\n【京东账号${$.index}(${$.UserName})的京喜token好友互助码】\2\\n\`)/g' /ql/scripts/*_jd_cfd.js + local task_name=$1 + local config_name=$2 + local chinese_name=$3 + local i j k m n pt_pin_in_log code tmp_grep tmp_my_code tmp_for_other user_num random_num_list + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + local user_sum=${#array[*]} + if cd $dir_log/$task_name &>/dev/null && [[ $(ls) ]]; then + ## 寻找所有互助码以及对应的pt_pin + i=0 + pt_pin_in_log=() + code=() + pt_pin_and_code=$(ls -r *.log | xargs awk -v var="的$chinese_name好友互助码" 'BEGIN{FS="[( )】]+"; OFS="&"} $3~var {print $2,$4}') + for line in $pt_pin_and_code; do + pt_pin_in_log[i]=$(echo $line | awk -F "&" '{print $1}') + code[i]=$(echo $line | awk -F "&" '{print $2}') + let i++ + done + + ## 输出互助码 + if [[ ${#code[*]} -gt 0 ]]; then + for ((m = 0; m < ${#pt_pin[*]}; m++)); do + tmp_my_code="" + j=$((m + 1)) + for ((n = 0; n < ${#code[*]}; n++)); do + if [[ ${pt_pin[m]} == ${pt_pin_in_log[n]} ]]; then + tmp_my_code=${code[n]} + break + fi + done + echo "$config_name$j='$tmp_my_code'" + done + else + echo "## 从日志中未找到任何互助码" + fi +fi +} + +break_help(){ +local BreakHelpInterval=$(echo $BreakHelpNum | perl -pe "{s|~|-|; s|_|-|}" | sed 's/\(\d\+\)-\(\d\+\)/{\1..\2}/g') +local BreakHelpNumType=$(echo $BreakHelpNum | sed 's/ //g' | perl -pe "{s|-||; s|~||; s|_||}" | sed 's/^\d\+$//g') +if [ $BreakHelpType = 1 ]; then + echo -e "\n# 您已启用屏蔽助力功能!" + if [ "$BreakHelpNumType" = "" ]; then + echo -e "\n# 当前屏蔽的账号序号或区间: $BreakHelpInterval " + echo -e "\n# 开始调整互助规则" + for i in $(eval echo $BreakHelpInterval); do + sed -i "s/@\${My[A-Za-z]\+$i}\|\${My[A-Za-z]\+$i}@//g" $file_task_before + done + echo -e "\n# 互助规则调整完成" + else + echo -e "\n# 变量值填写不规范,请检查后重试!" + fi +fi +} + +#更新互助码和互助规则 +update_help(){ +code_log_newest=`ls -at $dir_code/* | head -n 1` +source $code_log_newest +case $UpdateType in + 1) + if [ -f $code_log_newest ] && [ -f $file_task_before ]; then + mkdir -p $dir_config/bak + [[ $BAKUP = "1" ]] && cp $file_task_before $dir_config/bak/task_before_$log_time.sh + echo -e "\n# 开始更新配置文件的互助码和互助规则" + help_codes Fruit + help_rules Fruit + help_codes Pet + help_rules Pet + help_codes Bean + help_rules Bean + help_codes JdFactory + help_rules JdFactory + help_codes DreamFactory + help_rules DreamFactory + help_codes Jdzz + help_rules Jdzz + help_codes Joy + help_rules Joy + help_codes BookShop + help_rules BookShop + help_codes Cash + help_rules Cash + help_codes Jxnc + help_rules Jxnc + help_codes Sgmh + help_rules Sgmh + help_codes Cfd + help_rules Cfd + help_codes Health + help_rules Health + help_codes Carni + help_rules Carni + help_codes City + help_rules City + help_codes_only TokenJxnc + break_help + echo -e "\n# 配置文件的互助码和互助规则已完成更新" + elif [ ! -f $code_log_newest ]; then + echo -e "\n# 日志文件不存在,请检查后重试!" + elif [ ! -f $file_task_before ]; then + echo -e "\n# 配置文件不存在,请检查后重试!" + fi + ;; + *) + echo -e "\n# 您已设置不更新配置文件的互助码和互助规则" + ;; +esac +} + +## 执行并写入日志 +log_time=$(date "+%Y-%m-%d-%H-%M-%S") +log_path="$dir_code/$log_time.log" +make_dir "$dir_code" +export_all_codes | perl -pe "{s|京东种豆|种豆|; s|crazyJoy任务|疯狂的JOY|}" | tee $log_path +sleep 5 +update_help + diff --git a/Scripts/sh/Helpcode2.8/config_sample.sh b/Scripts/sh/Helpcode2.8/config_sample.sh new file mode 100644 index 0000000..4e65dab --- /dev/null +++ b/Scripts/sh/Helpcode2.8/config_sample.sh @@ -0,0 +1,346 @@ +## Version: v2.8.0 +## Date: 2021-06-20 +## Update Content: 可持续发展纲要\n1. session管理破坏性修改\n2. 配置管理可编辑config下文件\n3. 自定义脚本改为查看脚本\n4. 移除互助相关 + +## 上面版本号中,如果第2位数字有变化,那么代表增加了新的参数,如果只有第3位数字有变化,仅代表更新了注释,没有增加新的参数,可更新可不更新 + +## 在运行 ql repo 命令时,是否自动删除失效的脚本与定时任务 +AutoDelCron="true" + +## 在运行 ql repo 命令时,是否自动增加新的本地定时任务 +AutoAddCron="true" + +## ql repo命令拉取脚本时需要拉取的文件后缀,直接写文件后缀名即可 +RepoFileExtensions="js py" + +## 由于github仓库拉取较慢,所以会默认添加代理前缀,如不需要请移除 +GithubProxyUrl="https://ghproxy.com/" + +## 设置定时任务执行的超时时间,默认1h,后缀"s"代表秒(默认值), "m"代表分, "h"代表小时, "d"代表天 +CommandTimeoutTime="1h" + +## 设置批量执行任务时的并发数,默认同时执行5个任务 +MaxConcurrentNum="40" + +## 在运行 task 命令时,随机延迟启动任务的最大延迟时间 +## 默认给javascript任务加随机延迟,如 RandomDelay="300" ,表示任务将在 1-300 秒内随机延迟一个秒数,然后再运行,取消延迟赋值为空 +RandomDelay="300" + +## 如果你自己会写shell脚本,并且希望在每次运行 ql update 命令时,额外运行你的 shell 脚本,请赋值为 "true",默认为true +EnableExtraShell="true" + +## 是否自动启动bot,默认不启动,设置为true时自动启动,目前需要自行克隆bot仓库所需代码,存到ql/repo目录下,文件夹命名为dockerbot +AutoStartBot="true" + +## 安装bot依赖时指定pip源,默认使用清华源,如不需要源,设置此参数为空 +PipMirror="https://pypi.tuna.tsinghua.edu.cn/simple" + +## 通知环境变量 +## 1. Server酱 +## https://sct.ftqq.com +## 下方填写 SCHKEY 值或 SendKey 值 +export PUSH_KEY="" + +## 2. BARK +## 下方填写app提供的设备码,例如:https://api.day.app/123 那么此处的设备码就是123 +export BARK_PUSH="" +## 下方填写推送声音设置,例如choo,具体值请在bark-推送铃声-查看所有铃声 +export BARK_SOUND="" + +## 3. Telegram +## 下方填写自己申请@BotFather的Token,如10xxx4:AAFcqxxxxgER5uw +export TG_BOT_TOKEN="" +## 下方填写 @getuseridbot 中获取到的纯数字ID +export TG_USER_ID="" +## Telegram 代理IP(选填) +## 下方填写代理IP地址,代理类型为 http,比如您代理是 http://127.0.0.1:1080,则填写 "127.0.0.1" +## 如需使用,请自行解除下一行的注释 +export TG_PROXY_HOST="" +## Telegram 代理端口(选填) +## 下方填写代理端口号,代理类型为 http,比如您代理是 http://127.0.0.1:1080,则填写 "1080" +## 如需使用,请自行解除下一行的注释 +export TG_PROXY_PORT="" +## Telegram 代理的认证参数(选填) +export TG_PROXY_AUTH="" +## Telegram api自建反向代理地址(选填) +## 教程:https://www.hostloc.com/thread-805441-1-1.html +## 如反向代理地址 http://aaa.bbb.ccc 则填写 aaa.bbb.ccc +## 如需使用,请赋值代理地址链接,并自行解除下一行的注释 +export TG_API_HOST="" + +## 4. 钉钉 +## 官方文档:https://developers.dingtalk.com/document/app/custom-robot-access +## 下方填写token后面的内容,只需 https://oapi.dingtalk.com/robot/send?access_token=XXX 等于=符号后面的XXX即可 +export DD_BOT_TOKEN="" +export DD_BOT_SECRET="" + +## 5. 企业微信机器人 +## 官方说明文档:https://work.weixin.qq.com/api/doc/90000/90136/91770 +## 下方填写密钥,企业微信推送 webhook 后面的 key +export QYWX_KEY="" + +## 6. 企业微信应用 +## 参考文档:http://note.youdao.com/s/HMiudGkb +## 下方填写素材库图片id(corpid,corpsecret,touser,agentid),素材库图片填0为图文消息, 填1为纯文本消息 +export QYWX_AM="" + +## 7. iGot聚合 +## 参考文档:https://wahao.github.io/Bark-MP-helper +## 下方填写iGot的推送key,支持多方式推送,确保消息可达 +export IGOT_PUSH_KEY="" + +## 8. Push Plus +## 官方网站:http://www.pushplus.plus +## 下方填写您的Token,微信扫码登录后一对一推送或一对多推送下面的token,只填 PUSH_PLUS_TOKEN 默认为一对一推送 +export PUSH_PLUS_TOKEN="" +## 一对一多推送(选填) +## 下方填写您的一对多推送的 "群组编码" ,(一对多推送下面->您的群组(如无则新建)->群组编码) +## 1. 需订阅者扫描二维码 2、如果您是创建群组所属人,也需点击“查看二维码”扫描绑定,否则不能接受群组消息推送 +export PUSH_PLUS_USER="" + +## 9. go-cqhttp +## gobot_url 推送到个人QQ: http://127.0.0.1/send_private_msg 群:http://127.0.0.1/send_group_msg +## gobot_token 填写在go-cqhttp文件设置的访问密钥 +## gobot_qq 如果GOBOT_URL设置 /send_private_msg 则需要填入 user_id=个人QQ 相反如果是 /send_group_msg 则需要填入 group_id=QQ群 +## go-cqhttp相关API https://docs.go-cqhttp.org/api +export GOBOT_URL="" +export GOBOT_TOKEN="" +export GOBOT_QQ="" + +## 10. 临时屏蔽某个Cookie +## 如果某些Cookie已经失效了,但暂时还没法更新,可以使用此功能在不删除该Cookie和重新修改Cookie编号的前提下,临时屏蔽掉某些编号的Cookie +## 多个Cookie编号以半角的空格分隔,两侧一对半角双引号,使用此功能后,在运行js脚本时账户编号将发生变化 +## 举例1:TempBlockCookie="2" 临时屏蔽掉Cookie2 +## 举例2:TempBlockCookie="2 4" 临时屏蔽掉Cookie2和Cookie4 + +## 如果只是想要屏蔽某个账号不参加某些活动,可以参考下面 case 这个命令的例子来控制 +## case $1 in +## *jd_fruit*) +## TempBlockCookie="5" # 账号5不玩东东农场 +## ;; +## *jd_dreamFactory* | *jd_jdfactory*) +## TempBlockCookie="2" # 账号2不玩京喜工厂和东东工厂 +## ;; +## *jd_jdzz* | *jd_joy*) +## TempBlockCookie="3 6" # 账号3、账号6不玩京东赚赚和宠汪汪 +## ;; +## esac + +## 其他需要的变量,脚本中需要的变量使用 export 变量名= 声明即可 + +# 定义每日签到的通知形式 +## js脚本每日签到提供3种通知方式,分别为: +## 关闭通知,那么请在下方填入0 +## 简洁通知,那么请在下方填入1,其效果见:https://github.com/LXK9301/jd_scripts/blob/master/icon/bean_sign_simple.jpg +## 原始通知,那么请在下方填入2,如果不填也默认为2,内容比较长,这也是默认通知方式 +NotifyBeanSign="" + +# 定义每日签到每个接口间的延迟时间 +## 默认每个签到接口并发无延迟,如需要依次进行每个接口,请自定义延迟时间,单位为毫秒,延迟作用于每个签到接口, 如填入延迟则切换顺序签到(耗时较长) +export JD_BEAN_STOP="" + +# 脚本推送控制类环境变量 +## 1、京东多合一签到脚本关闭运行结果推送,默认推送,填true表示不推送 +export JD_BEAN_SIGN_STOP_NOTIFY="" +## 2、京东多合一签到脚本推送简单结果,默认推送完整版结果,填true表示启用简单推送 +export JD_BEAN_SIGN_NOTIFY_SIMPLE="true" +## 3、东东萌宠关闭推送。填写false为不关闭推送,true为关闭推送 +export PET_NOTIFY_CONTROL="false" +## 4、京东农场关闭推送。填写false为不关闭推送,true为关闭推送 +export FRUIT_NOTIFY_CONTROL="false" +## 5、京东领现金关闭推送。填写false为不关闭推送,true为关闭推送 +export CASH_NOTIFY_CONTROL="false" +## 6、京东摇钱树关闭推送。填写false为不关闭推送,true为关闭推送 +export MONEYTREE_NOTIFY_CONTROL="true" +## 7、京东点点券关闭推送。填写false为不关闭推送,true为关闭推送 +export DDQ_NOTIFY_CONTROL="false" +## 8、京东京东赚赚小程序关闭推送。填写false为不关闭推送,true为关闭推送 +export JDZZ_NOTIFY_CONTROL="false" +## 9、宠汪汪兑换京豆关闭推送。填写false为不关闭推送,true为关闭推送 +export JD_JOY_REWARD_NOTIFY="true" +## 10、宠汪汪赛跑获胜后是否推送通知。填false为不推送通知消息,true为推送通知消息 +export JOY_RUN_NOTIFY="true" +## 11、东东超市兑换奖品是否关闭推送通知。填false为不关闭推送,true为关闭推送 +export MARKET_REWARD_NOTIFY="false" +## 12、京喜财富岛控制是否运行脚本后通知。输入true为通知,不填则为不通知 +export CFD_NOTIFY_CONTROL="" +## 13、京喜农场岛控制是否运行脚本后通知。0=只通知成熟;1=本次获得水滴>0;2=任务执行;3=任务执行+未种植种子 +export JXNC_NOTIFY_LEVEL="3" + +# 功能配置类环境变量 +## 1、京东领现金红包兑换京豆开关。false为不换,true为换(花费2元红包兑换200京豆,一周可换四次),默认为false +export CASH_EXCHANGE="false" +## 2、宠汪汪喂食数量。可以填的数字0,10,20,40,80,其他数字不可 +export JOY_FEED_COUNT="80" +## 3、宠汪汪帮好友喂食。默认 "false" 不会自动给好友的汪汪喂食,如想自动喂食,请修改为 "true" +export JOY_HELP_FEED="true" +## 4、宠汪汪是否赛跑(默认参加双人赛跑)。false为不跑,true为跑 +export JOY_RUN_FLAG="true" +## 5、宠汪汪参加什么级别的赛跑。可选数字为2,10,50, +## 当JOY_RUN_FLAG不设置或设置为 "true" 时生效 +## 可选值:2,10,50,其他值不可以。其中2代表参加双人PK赛,10代表参加10人突围赛,50代表参加50人挑战赛,不填时默认为2 +## 各个账号间请使用 & 分隔,比如:JOY_TEAM_LEVEL="2&2&50&10" +## 如果您有5个账号但只写了四个数字,那么第5个账号将默认参加2人赛,账号如果更多,与此类似 +export JOY_TEAM_LEVEL="2&2&50&10" +## 6、宠汪汪赛跑自己账号内部互助。输入true为开启内部互助 +export JOY_RUN_HELP_MYSELF="true" +## 7、宠汪汪积分兑换多少京豆。目前可填值为20或者500,脚本默认0,0表示不兑换京豆 +export JD_JOY_REWARD_NAME="500" +## 8、东东超市兑换京豆数量。目前可输入值为20或者1000,或者其他商品的名称,例如碧浪洗衣凝珠 +export MARKET_COIN_TO_BEANS="超值京豆包" +## 9、东东超市是否参加pk。true表示参加,false表示不参加 +export JOIN_PK_TEAM="true" +## 10、东东超市是否用金币抽奖。true表示抽奖,false表示不抽奖 +export SUPERMARKET_LOTTERY="true" +## 11、东东农场是否使用水滴换豆卡。true表示换,false表示不换 +export FRUIT_BEAN_CARD="true" +## 12、是否取关商品。环境变量内容的意思依次是是否取关全部商品(0表示一个都不),是否取关全部店铺数(0表示一个都不),遇到此商品不再进行取关,遇到此店铺不再进行取关 +export UN_SUBSCRIBES="300,300,," +## 12、定义 unsubscribe 取关参数 +## 具体教程:https://gitee.com/lxk0301/jd_docker/blob/master/githubAction.md#%E5%8F%96%E5%85%B3%E5%BA%97%E9%93%BAsecret%E7%9A%84%E8%AF%B4%E6%98%8E +## jd_unsubscribe这个任务是用来取关每天做任务关注的商品和店铺,默认在每次运行时取关20个商品和20个店铺 +## 如果取关数量不够,可以根据情况增加,还可以设置 jdUnsubscribeStopGoods 和 jdUnsubscribeStopShop +## 商品取关数量 +goodPageSize="30" +## 店铺取关数量 +shopPageSize="60" +## 遇到此商品不再取关此商品以及它后面的商品,需去商品详情页长按拷贝商品信息 +jdUnsubscribeStopGoods="" +## 遇到此店铺不再取关此店铺以及它后面的店铺,请从头开始输入店铺名称 +jdUnsubscribeStopShop="" +## 13、疯狂的JOY循环助力开关。true表示循环助力,false表示不循环助力,默认不开启循环助力 +export JDJOY_HELPSELF="true" +## 14、疯狂的JOY京豆兑换。0表示不换,其他按可兑换数填写。目前最小2000 +export JDJOY_APPLYJDBEAN="2000" +## 15、疯狂的JOY购买joy等级。如需要使用请自行解除注释,可购买等级为 "1~30" +export BUY_JOY_LEVEL="" +## 16、摇钱树是否卖出金果。true卖出,false不卖出,默认false +export MONEY_TREE_SELL_FRUIT="true" +## 17、东东工厂心仪商品。 +export FACTORAY_WANTPRODUCT_NAME="" +## 18、东东工厂控制哪个京东账号不运行此脚本。多个使用&连接 +export JDFACTORY_FORBID_ACCOUNT="" +## 19、京喜工厂控制哪个京东账号不运行此脚本。多个使用&连接 +export DREAMFACTORY_FORBID_ACCOUNT="" +## 20、lxk0301脚本是否加购。如加设置true +export PURCHASE_SHOPS="true" +## 21、京喜工厂拼团瓜分电力活动的activeId(当前需抓包替换或去群里求别人分享) +export TUAN_ACTIVEID="" + +# 阿道夫部分环境变量 +## 1、阿道夫脚本加购开关,填true加购 +export ADOLF_ADDSKU="true" +## 2、阿道夫脚本入会开关,填true入会 +export ADOLF_MARTIN="true" + +# zoopanda 部分环境变量 +## 1、zoopanda 与粽不同入会 +export ZOO_OPENCAD="true" +## 2、zoopanda 与粽不同加购 +export ZOO_ADD2CART="true" + +# 龙猪猪环境变量 +## 京豆雨通知,填写true为不关闭推送,false为关闭推送 +export RAIN_NOTIFY_CONTROL="false" +## 整点京豆雨RRA +export SUPER_RAIN_RRA="" +## 半点京豆雨RRA +export HALF_RAIN_RRA="" + +# JDHelloWorld 部分环境变量 +## 宠汪汪二代目 +### 默认80,10、20、40、80可选 +export feedNum="80" +### 默认双人跑 +export JD_JOY_teamLevel="2" + +# 柠檬(胖虎部分环境变量) +## 1、京喜工厂抢茅台 +### 自定义商品变量 +export shopid="1598" ##你要商品ID 冰箱 +export shopid1="1607" ##你要商品ID 茅台 +## 2、推一推 +### 入口:极速版-赚金币 +### 分享到QQ查看邀请码,packetId就是 +### 自定义变量 +export tytpacketId="" +## 3、拆红包 +export chbpacketId="" +## 4、是兄弟就砍我 +### 是兄弟就来砍我脚本要参加砍价的商品ID +export actId="" +export actId1="" +export actId2="" +export actId3="" +export actId4="" +### 是兄弟就来砍我脚本要要参加砍价的邀请码 +export packetId="" +## 5、是兄弟就砍我2 +### 惊喜欢乐砍 自定义变量 入口:京喜APP-我的-惊喜欢乐砍 +export launchid="" ##你的邀请码 +### 第一次参加变量设置为true查看商品ID,填写商品ID后自动获取邀请码邀请;如果只助力,变量设置为false +export first="false" +export active="" ##商品ID +## 6、赚金币 +### 入口:极速版-百元生活费-赚金币-邀请好友 +### 第一次运行可不填写邀请码,运行一次查看自己的邀请码 +export InviterPin="" ##你的邀请码 +## 7、0元砍价,入口:京东-我的-0元砍价 +### 使用教程: +### 第一步,运行脚本一次日志查看商品ID +### 获取你要砍价的商品ID后变量填写 +export skuId="" ##这里填获取的商品ID +### 第二步,再运行一次日志查看商品activityId变量填写 +export activity="" ##这里填获取的商品activityId +## 8、邀请有礼 +### 自定义邀请码环境变量 +export yqm="" ##你的邀请码 +## 9、全民挖现金 +### 入口:京东-我的-全民挖现金 +### 运行一次查看邀请码 变量你的邀请码 +export shareCode="" +## 10、省钱大赢家本期活动ID +export redEnvelopeId="" +## 11、省钱大赢家邀请码 +export inviter="" +## 12、签到领现金添加变量方式 +## 自行添加变量设置邀请码 格式如下 默认10个 +export cashinviteCode="" +export cashinviteCode2="" +export cashinviteCode3="" +## 13、大老板农场 新增自定义变量通知开关。true通知打开,false为关闭 +export dlbtz="true" + +# curtinlv 环境变量 +## 1、赚京豆 +### 助力账号,填写pt_pin或用户名的值,如 zlzh = ['aaaa','xxxx','yyyy'] ,支持ENV +export zlzh=['CurtinLV','xxxx','yyyy'] +## 2、入会开卡 +### int,入会送豆满足此值,否则不入会 +export openCardBean="30" +### 布尔值,是否记录符合条件的shopid(默认True) +export record="true" +### 布尔值, True:仅记录,不入会(默认False) +export onlyrecord="false" +### 布尔值,开启记忆功能,接力上一次异常中断位置继续。(默认yes) +export memory="false" +### 布尔值,True:只打印部分日志 False:打印所有日志 +export printlog="true" +### Float,限制速度,单位秒,如果请求过快报错适当调整0.5秒以上 +export sleepNum="0.5" +### 布尔值,True:使用作者远程仓库更新的id,False:使用本地shopid.txt的id +export isRemoteSid="true" + +# Wenmoux 部分环境变量 +## 1、QQ星系牧场自动兑换20豆 +export Cowexchange="true" +## 欧洲狂欢杯兑换兑换豆子,填38豆子,填39e卡 +export Cupexid="39" +## 10秒阅读 +## 填写自己CK +export Readck="" +## 填写自己设备UA +export Read10UA="" +## 填true推送消息,默认不推送 +export jrpush="" + diff --git a/Scripts/sh/Helpcode2.8/task_before.sh b/Scripts/sh/Helpcode2.8/task_before.sh new file mode 100644 index 0000000..3ad63fa --- /dev/null +++ b/Scripts/sh/Helpcode2.8/task_before.sh @@ -0,0 +1,183 @@ +#!/usr/bin/env bash + +#Build 20210703-001 + +## 东东农场: +MyFruit1='' + +ForOtherFruit1="" + + +## 东东萌宠: +MyPet1='' + +ForOtherPet1="" + + +## 种豆得豆: +MyBean1='' + +ForOtherBean1="" + + +## 京喜工厂: +MyDreamFactory1='' + +ForOtherDreamFactory1="" + + +## 东东工厂: +MyJdFactory1='' + +ForOtherJdFactory1="" + + +## 疯狂的JOY: +MyJoy1='' + +ForOtherJoy1="" + + +## 京东赚赚: +MyJdzz1='' + +ForOtherJdzz1="" + + +## 京喜农场: +MyJxnc1='' + +ForOtherJxnc1="" + + +## 口袋书店: +MyBookShop1='' + +ForOtherBookShop1="" + + +## 签到领现金: +MyCash1='' + +ForOtherCash1="" + + +## 闪购盲盒: +MySgmh1='' + +ForOtherSgmh1="" + + +## 京喜财富岛: +MyCfd1='' + +ForOtherCfd1="" + + +## 东东健康社区: +MyHealth1='' + +ForOtherHealth1="" + + +## 京东手机狂欢城: +MyCarni1='' + +ForOtherCarni1="" + + +## 城城领现金: +MyCity1='' + +ForOtherCity1="" + +## 京喜农场 Token (可用于京喜财富岛提现等) +TokenJxnc1='' + +env_name=( + FRUITSHARECODES ## 东东农场互助码 + PETSHARECODES ## 东东萌宠互助码 + PLANT_BEAN_SHARECODES ## 种豆得豆互助码 + DREAM_FACTORY_SHARE_CODES ## 京喜工厂互助码 + DDFACTORY_SHARECODES ## 东东工厂互助码 + JDJOY_SHARECODES ## 疯狂的JOY互助码 + JDZZ_SHARECODES ## 京东赚赚互助码 + JXNC_SHARECODES ## 京喜农场助力码 + BOOKSHOP_SHARECODES ## 口袋书店互助码 + JD_CASH_SHARECODES ## 签到领现金互助码 + JDSGMH_SHARECODES ## 闪购盲盒互助码 + JDCFD_SHARECODES ## 京喜财富岛互助码 + JDHEALTH_SHARECODES ## 东东健康社区互助码 + CITY_SHARECODES ## lxk城城领现金 + JD818_SHARECODES ## lxk手机狂欢城 + jxcollecturl ## 执意Ariszy京喜工厂收取电力 + MyZooPk + MyZoo + JXNCTOKENS ## 京喜农场 token(京喜财富岛提现用) +) +var_name=( + ForOtherFruit + ForOtherPet + ForOtherBean + ForOtherDreamFactory + ForOtherJdFactory + ForOtherJoy + ForOtherJdzz + ForOtherJxnc + ForOtherBookShop + ForOtherCash + ForOtherSgmh + ForOtherCfd + ForOtherHealth + ForOtherCarni + ForOtherCity + Jxcollecturl + MyZooPk + MyZoo + TokenJxnc +) + +combine_sub() { + local what_combine=$1 + local combined_all="" + local tmp1 tmp2 + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + local user_sum=${#array[*]} + for ((i = 1; i <= $user_sum; i++)); do + local tmp1=$what_combine$i + local tmp2=${!tmp1} + combined_all="$combined_all&$tmp2" + done + echo $combined_all | perl -pe "{s|^&||; s|^@+||; s|&@|&|g; s|@+&|&|g; s|@+|@|g; s|@+$||}" +} + +## 正常依次运行时,组合所有账号的Cookie与互助码 +combine_all() { + for ((i = 0; i < ${#env_name[*]}; i++)); do + result=$(combine_sub ${var_name[i]}) + if [[ $result ]]; then + export ${env_name[i]}="$result" + fi + done +} + +#if [[ $(ls $dir_code) ]]; then +# latest_log=$(ls -r $dir_code | head -1) +# . $dir_code/$latest_log + combine_all +#fi + +## 临时屏蔽某账号运行活动脚本 +TempBlock_JD_COOKIE(){ + . /$file_env + local envs=$(eval echo "\$JD_COOKIE") + local array=($(echo $envs | sed 's/&/ /g')) + for i in $TempBlockCookie; do + unset array[$(($i-1))] + done + jdCookie=$(echo ${array[*]} | sed 's/\ /\&/g') + [[ ! -z $jdCookie ]] && export JD_COOKIE="$jdCookie" +} + +TempBlock_JD_COOKIE diff --git a/Tasks/Daily.json b/Tasks/Daily.json index dfa798c..7a96ec4 100644 --- a/Tasks/Daily.json +++ b/Tasks/Daily.json @@ -40,7 +40,7 @@ "time":"0 0 0 * * *", "job":{ "type":"runjs", - "target":"https://raw.githubusercontent.com/ztxtop/x/aa4ddeca813fbf5c231dd4adaec68a7632cb292c/jx_cfdtx.js" + "target":"jx_cfdtx.js" }, "running":true }, diff --git a/Tasks/qlrepo/Readme.md b/Tasks/qlrepo/Readme.md index 51ab672..ec3a238 100644 --- a/Tasks/qlrepo/Readme.md +++ b/Tasks/qlrepo/Readme.md @@ -60,13 +60,9 @@ ql repo https://github.com/photonmang/quantumultX.git "JDscripts" ### 名称之后标注`﹢`的单脚本,若上面已拉取仓库的可以不拉,否则会重复拉取。这里适用于只拉取部分脚本使用 > `curtinlv`﹢ -⏱ 三处 cron 推荐 +>> 抢京豆 ``` -15 8 * * * -``` ->> 赚京豆 -``` -ql raw https://raw.githubusercontent.com/curtinlv/JD-Script/main/jd_zjd.py +ql raw https://raw.githubusercontent.com/Oreomeow/JD-Script/main/jd_qjd.py ``` >> 入会 ``` @@ -109,4 +105,4 @@ ql repo https://github.com/longzhuzhu/nianyu.git "qx" - `panghu999/panghu` ``` ql repo https://github.com/panghu999/panghu.git "jd_" -``` +``` \ No newline at end of file