diff --git a/docker/crontab_list.sh b/docker/crontab_list.sh index 6cd8ea8..480156d 100755 --- a/docker/crontab_list.sh +++ b/docker/crontab_list.sh @@ -4,6 +4,8 @@ #30 * * * * sh +x /scripts/docker/auto_help.sh collect >> /scripts/logs/auto_help_collect.log 2>&1 ##############短期活动############## +##伊利 +50 9 * * * node /scripts/jd_yili_cow.js >> /scripts/logs/jd_yili_cow.log 2>&1 #柠檬推一推 50 4 * * * node /scripts/jd_tyt.js >> /scripts/logs/jd_tyt.log 2>&1 #送豆得豆 diff --git a/jd_cfd.js b/jd_cfd.js index 86a183f..87234df 100755 --- a/jd_cfd.js +++ b/jd_cfd.js @@ -61,26 +61,26 @@ var CryptoJS = require('crypto-js'); var notify = require('./sendNotify'); dotenv.config(); var appId = 10028, fingerprint, token = '', enCryptMethodJD; -var cookie = '', cookiesArr = [], res = '', shareCodes = []; +var cookie = '', res = '', shareCodes = [], isCollector = false; var HELP_HW = process.env.HELP_HW ? process.env.HELP_HW : "true"; console.log('帮助HelloWorld:', HELP_HW); var HELP_POOL = process.env.HELP_POOL ? process.env.HELP_POOL : "true"; console.log('帮助助力池:', HELP_POOL); var UserName, index; !(function () { return __awaiter(void 0, void 0, void 0, function () { - var i, _a, isLogin, nickName, e_1, strDT, strMyShareId, i_1, RealTmReport, j, _i, _b, stage, awardRes, employee, _c, employee_1, emp, empRes, _d, _e, sign, shipRes, bags, _f, _g, s, strTypeCnt, n, tasks, _h, _j, t, _k, _l, e, employ, _m, _o, t, _p, _q, b, data, e_2, data, e_3, i, j; + var cookiesArr, i, _a, isLogin, nickName, e_1, strDT, strMyShareId, i_1, RealTmReport, j, _i, _b, stage, awardRes, employee, _c, employee_1, emp, empRes, _d, _e, sign, shipRes, bags, _f, _g, s, strTypeCnt, n, j, tasks, _h, _j, t, _k, _l, e, employ, _m, _o, t, _p, _q, b, data, e_2, data, e_3, i, j; return __generator(this, function (_r) { switch (_r.label) { case 0: return [4 /*yield*/, requestAlgo()]; case 1: _r.sent(); - return [4 /*yield*/, requireConfig()]; + return [4 /*yield*/, TS_USER_AGENTS_1.requireConfig()]; case 2: - _r.sent(); + cookiesArr = _r.sent(); i = 0; _r.label = 3; case 3: - if (!(i < cookiesArr.length)) return [3 /*break*/, 81]; + if (!(i < cookiesArr.length)) return [3 /*break*/, 86]; cookie = cookiesArr[i]; UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)[1]); index = i + 1; @@ -89,7 +89,7 @@ var UserName, index; _a = _r.sent(), isLogin = _a.isLogin, nickName = _a.nickName; if (!isLogin) { notify.sendNotify(__filename.split('/').pop(), "cookie\u5DF2\u5931\u6548\n\u4EAC\u4E1C\u8D26\u53F7" + index + "\uFF1A" + (nickName || UserName)); - return [3 /*break*/, 80]; + return [3 /*break*/, 85]; } console.log("\n\u5F00\u59CB\u3010\u4EAC\u4E1C\u8D26\u53F7" + index + "\u3011" + (nickName || UserName) + "\n"); _r.label = 5; @@ -114,7 +114,7 @@ var UserName, index; case 10: if (!(i_1 < 8 - res.dwCurProgress)) return [3 /*break*/, 19]; console.log('继续合成'); - RealTmReport = getRandomNumberByRange(10, 20); + RealTmReport = TS_USER_AGENTS_1.getRandomNumberByRange(10, 20); console.log('本次合成需要上报:', RealTmReport); j = 0; _r.label = 11; @@ -125,7 +125,7 @@ var UserName, index; res = _r.sent(); if (res.iRet === 0) console.log("\u6E38\u620F\u4E2D\u9014\u4E0A\u62A5" + (j + 1) + "\uFF1AOK"); - return [4 /*yield*/, wait(5000)]; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(5000)]; case 13: _r.sent(); _r.label = 14; @@ -137,7 +137,7 @@ var UserName, index; res = _r.sent(); console.log('游戏完成,已合成', res.dwCurProgress); console.log('游戏完成,等待3s'); - return [4 /*yield*/, wait(3000)]; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(3000)]; case 17: _r.sent(); _r.label = 18; @@ -157,8 +157,9 @@ var UserName, index; return [4 /*yield*/, api('user/ComposeGameAward', '__t,dwCurStageEndCnt,strZone', { __t: Date.now(), dwCurStageEndCnt: stage.dwCurStageEndCnt })]; case 22: awardRes = _r.sent(); - console.log('珍珠领奖:', awardRes.ddwCoin); - return [4 /*yield*/, wait(3000)]; + console.log(awardRes); + console.log('珍珠领奖:', awardRes.ddwCoin, awardRes.addMonety); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(3000)]; case 23: _r.sent(); _r.label = 24; @@ -182,7 +183,7 @@ var UserName, index; empRes = _r.sent(); if (empRes.iRet === 0) console.log('助力奖励领取成功:', empRes.Data.ddwCoin); - return [4 /*yield*/, wait(1000)]; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; case 29: _r.sent(); _r.label = 30; @@ -219,7 +220,7 @@ var UserName, index; shipRes = _r.sent(); console.log(shipRes); console.log('正在下船,等待30s'); - return [4 /*yield*/, wait(30000)]; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(30000)]; case 38: _r.sent(); return [4 /*yield*/, api('story/SpecialUserOper', '_cfd_t,bizCode,ddwTriggerDay,dwEnv,dwType,ptag,source,strStoryId,strZone,triggerType', { strStoryId: res.StoryInfo.StoryList[0].strStoryId, dwType: '3', triggerType: 0, ddwTriggerDay: res.StoryInfo.StoryList[0].ddwTriggerDay })]; @@ -233,6 +234,11 @@ var UserName, index; case 40: if (res.StoryInfo.StoryList[0].Collector) { console.log('收藏家出现'); + // TODO 背包满了再卖给收破烂的 + // res = await api('story/CollectorOper', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,strStoryId,dwType,ddwTriggerDay', {strStoryId: res.StoryInfo.StoryList[0].strStoryId, dwType: '2', ddwTriggerDay: res.StoryInfo.StoryList[0].ddwTriggerDay}) + // console.log(res) + // await wait(1000) + // isCollector = true } _r.label = 41; case 41: return [4 /*yield*/, api('story/querystorageroom', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; @@ -242,11 +248,10 @@ var UserName, index; bags = []; for (_f = 0, _g = res.Data.Office; _f < _g.length; _f++) { s = _g[_f]; - console.log(s.dwCount, s.dwType); bags.push(s.dwType); bags.push(s.dwCount); } - return [4 /*yield*/, wait(1000)]; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; case 43: _r.sent(); strTypeCnt = ''; @@ -257,7 +262,7 @@ var UserName, index; strTypeCnt += bags[n] + "|"; } if (!(bags.length !== 0)) return [3 /*break*/, 45]; - return [4 /*yield*/, api('story/sellgoods', '_cfd_t,bizCode,dwEnv,dwSceneId,ptag,source,strTypeCnt,strZone', { dwSceneId: '1', strTypeCnt: strTypeCnt })]; + return [4 /*yield*/, api('story/sellgoods', '_cfd_t,bizCode,dwEnv,dwSceneId,ptag,source,strTypeCnt,strZone', { dwSceneId: isCollector ? '2' : '1', strTypeCnt: strTypeCnt })]; case 44: res = _r.sent(); console.log('卖贝壳收入:', res.Data.ddwCoin, res.Data.ddwMoney); @@ -266,200 +271,218 @@ var UserName, index; case 46: // 垃圾🚮 res = _r.sent(); - if (!(res.Data.StoryInfo.StoryList.length !== 0)) return [3 /*break*/, 48]; - return [4 /*yield*/, api('story/RubbishOper', '')]; + if (!(res.Data.StoryInfo.StoryList.length !== 0)) return [3 /*break*/, 53]; + console.log('有垃圾'); + return [4 /*yield*/, api('story/RubbishOper', '_cfd_t,bizCode,dwEnv,dwRewardType,dwType,ptag,source,strZone', { dwType: '1', dwRewardType: 0 })]; case 47: _r.sent(); - _r.label = 48; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; case 48: + _r.sent(); + j = 1; + _r.label = 49; + case 49: + if (!(j < 9)) return [3 /*break*/, 53]; + return [4 /*yield*/, api('story/RubbishOper', '_cfd_t,bizCode,dwEnv,dwRewardType,dwRubbishId,dwType,ptag,source,strZone', { dwType: '2', dwRewardType: 0, dwRubbishId: j })]; + case 50: + res = _r.sent(); + console.log('垃圾分类:', res.Data.RubbishGame.AllRubbish.ddwCoin); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1500)]; + case 51: + _r.sent(); + _r.label = 52; + case 52: + j++; + return [3 /*break*/, 49]; + case 53: tasks = void 0; return [4 /*yield*/, api('story/GetActTask', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; - case 49: + case 54: tasks = _r.sent(); _h = 0, _j = tasks.Data.TaskList; - _r.label = 50; - case 50: - if (!(_h < _j.length)) return [3 /*break*/, 54]; + _r.label = 55; + case 55: + if (!(_h < _j.length)) return [3 /*break*/, 59]; t = _j[_h]; - if (!(t.dwCompleteNum === t.dwTargetNum && t.dwAwardStatus === 2)) return [3 /*break*/, 53]; + if (!(t.dwCompleteNum === t.dwTargetNum && t.dwAwardStatus === 2)) return [3 /*break*/, 58]; return [4 /*yield*/, api('Award', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,taskId', { taskId: t.ddwTaskId })]; - case 51: + case 56: res = _r.sent(); if (res.ret === 0) { console.log(t.strTaskName + "\u9886\u5956\u6210\u529F:", res.data.prizeInfo); } - return [4 /*yield*/, wait(1000)]; - case 52: + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; + case 57: _r.sent(); - _r.label = 53; - case 53: + _r.label = 58; + case 58: _h++; - return [3 /*break*/, 50]; - case 54: return [4 /*yield*/, api('user/EmployTourGuideInfo', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; - case 55: + return [3 /*break*/, 55]; + case 59: return [4 /*yield*/, api('user/EmployTourGuideInfo', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; + case 60: // 导游 res = _r.sent(); - if (!!res.TourGuideList) return [3 /*break*/, 56]; + if (!!res.TourGuideList) return [3 /*break*/, 61]; console.log('手动雇佣4个试用导游'); - return [3 /*break*/, 61]; - case 56: + return [3 /*break*/, 66]; + case 61: _k = 0, _l = res.TourGuideList; - _r.label = 57; - case 57: - if (!(_k < _l.length)) return [3 /*break*/, 61]; + _r.label = 62; + case 62: + if (!(_k < _l.length)) return [3 /*break*/, 66]; e = _l[_k]; - if (!(e.strBuildIndex !== 'food' && e.ddwRemainTm === 0)) return [3 /*break*/, 60]; + if (!(e.strBuildIndex !== 'food' && e.ddwRemainTm === 0)) return [3 /*break*/, 65]; return [4 /*yield*/, api('user/EmployTourGuide', '_cfd_t,bizCode,ddwConsumeCoin,dwEnv,dwIsFree,ptag,source,strBuildIndex,strZone', { ddwConsumeCoin: e.ddwCostCoin, dwIsFree: 0, strBuildIndex: e.strBuildIndex })]; - case 58: + case 63: employ = _r.sent(); if (employ.iRet === 0) console.log("\u96C7\u4F63" + e.strBuildIndex + "\u5BFC\u6E38\u6210\u529F"); if (employ.iRet === 2003) - return [3 /*break*/, 61]; - return [4 /*yield*/, wait(1000)]; - case 59: + return [3 /*break*/, 66]; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; + case 64: _r.sent(); - _r.label = 60; - case 60: + _r.label = 65; + case 65: _k++; - return [3 /*break*/, 57]; - case 61: return [4 /*yield*/, mainTask('GetUserTaskStatusList', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,taskId', { taskId: 0 })]; - case 62: + return [3 /*break*/, 62]; + case 66: return [4 /*yield*/, mainTask('GetUserTaskStatusList', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,taskId', { taskId: 0 })]; + case 67: // 任务⬇️ tasks = _r.sent(); _m = 0, _o = tasks.data.userTaskStatusList; - _r.label = 63; - case 63: - if (!(_m < _o.length)) return [3 /*break*/, 70]; + _r.label = 68; + case 68: + if (!(_m < _o.length)) return [3 /*break*/, 75]; t = _o[_m]; - if (!(t.dateType === 2)) return [3 /*break*/, 69]; - if (!(t.awardStatus === 2 && t.completedTimes === t.targetTimes)) return [3 /*break*/, 66]; + if (!(t.dateType === 2)) return [3 /*break*/, 74]; + if (!(t.awardStatus === 2 && t.completedTimes === t.targetTimes)) return [3 /*break*/, 71]; console.log(1, t.taskName); return [4 /*yield*/, mainTask('Award', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,taskId', { taskId: t.taskId })]; - case 64: + case 69: res = _r.sent(); console.log(res); if (res.ret === 0) { console.log(t.taskName + "\u9886\u5956\u6210\u529F:", res.data.prizeInfo); } - return [4 /*yield*/, wait(2000)]; - case 65: + return [4 /*yield*/, TS_USER_AGENTS_1.wait(2000)]; + case 70: _r.sent(); - return [3 /*break*/, 69]; - case 66: - if (!(t.awardStatus === 2 && t.completedTimes < t.targetTimes && ([1, 2, 3, 4].includes(t.orderId)))) return [3 /*break*/, 69]; + return [3 /*break*/, 74]; + case 71: + if (!(t.awardStatus === 2 && t.completedTimes < t.targetTimes && ([1, 2, 3, 4].includes(t.orderId)))) return [3 /*break*/, 74]; console.log('做任务:', t.taskId, t.taskName, t.completedTimes, t.targetTimes); return [4 /*yield*/, mainTask('DoTask', '_cfd_t,bizCode,configExtra,dwEnv,ptag,source,strZone,taskId', { taskId: t.taskId, configExtra: '' })]; - case 67: - res = _r.sent(); - console.log('做任务:', res); - return [4 /*yield*/, wait(5000)]; - case 68: - _r.sent(); - _r.label = 69; - case 69: - _m++; - return [3 /*break*/, 63]; - case 70: - _p = 0, _q = ['food', 'fun', 'shop', 'sea']; - _r.label = 71; - case 71: - if (!(_p < _q.length)) return [3 /*break*/, 80]; - b = _q[_p]; - return [4 /*yield*/, api('user/GetBuildInfo', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', { strBuildIndex: b })]; case 72: res = _r.sent(); - console.log(b + "\u5347\u7EA7\u9700\u8981:", res.ddwNextLvlCostCoin); - return [4 /*yield*/, wait(1000)]; + console.log('做任务:', res); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(5000)]; case 73: _r.sent(); - if (!(res.dwCanLvlUp === 1)) return [3 /*break*/, 76]; - return [4 /*yield*/, api('user/BuildLvlUp', '_cfd_t,bizCode,ddwCostCoin,dwEnv,ptag,source,strBuildIndex,strZone', { ddwCostCoin: res.ddwNextLvlCostCoin, strBuildIndex: b })]; + _r.label = 74; case 74: - res = _r.sent(); - if (!(res.iRet === 0)) return [3 /*break*/, 76]; - console.log("\u5347\u7EA7\u6210\u529F"); - return [4 /*yield*/, wait(2000)]; + _m++; + return [3 /*break*/, 68]; case 75: - _r.sent(); + _p = 0, _q = ['food', 'fun', 'shop', 'sea']; _r.label = 76; - case 76: return [4 /*yield*/, api('user/CollectCoin', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', { strBuildIndex: b, dwType: '1' })]; + case 76: + if (!(_p < _q.length)) return [3 /*break*/, 85]; + b = _q[_p]; + return [4 /*yield*/, api('user/GetBuildInfo', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', { strBuildIndex: b })]; case 77: res = _r.sent(); - console.log(b + "\u6536\u91D1\u5E01:", res.ddwCoin); - return [4 /*yield*/, wait(1000)]; + console.log(b + "\u5347\u7EA7\u9700\u8981:", res.ddwNextLvlCostCoin); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; case 78: _r.sent(); - _r.label = 79; + if (!(res.dwCanLvlUp === 1)) return [3 /*break*/, 81]; + return [4 /*yield*/, api('user/BuildLvlUp', '_cfd_t,bizCode,ddwCostCoin,dwEnv,ptag,source,strBuildIndex,strZone', { ddwCostCoin: res.ddwNextLvlCostCoin, strBuildIndex: b })]; case 79: - _p++; - return [3 /*break*/, 71]; + res = _r.sent(); + if (!(res.iRet === 0)) return [3 /*break*/, 81]; + console.log("\u5347\u7EA7\u6210\u529F"); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(2000)]; case 80: + _r.sent(); + _r.label = 81; + case 81: return [4 /*yield*/, api('user/CollectCoin', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', { strBuildIndex: b, dwType: '1' })]; + case 82: + res = _r.sent(); + console.log(b + "\u6536\u91D1\u5E01:", res.ddwCoin); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; + case 83: + _r.sent(); + _r.label = 84; + case 84: + _p++; + return [3 /*break*/, 76]; + case 85: i++; return [3 /*break*/, 3]; - case 81: - if (!(HELP_HW === 'true')) return [3 /*break*/, 85]; - _r.label = 82; - case 82: - _r.trys.push([82, 84, , 85]); + case 86: + if (!(HELP_HW === 'true')) return [3 /*break*/, 90]; + _r.label = 87; + case 87: + _r.trys.push([87, 89, , 90]); return [4 /*yield*/, axios_1["default"].get("https://api.sharecode.ga/api/HW_CODES")]; - case 83: + case 88: data = (_r.sent()).data; shareCodes = __spreadArray(__spreadArray([], shareCodes), data.jxcfd); console.log('获取HelloWorld助力码成功'); - return [3 /*break*/, 85]; - case 84: + return [3 /*break*/, 90]; + case 89: e_2 = _r.sent(); console.log('获取HelloWorld助力码出错'); - return [3 /*break*/, 85]; - case 85: - if (!(HELP_POOL === 'true')) return [3 /*break*/, 90]; - _r.label = 86; - case 86: - _r.trys.push([86, 88, , 89]); + return [3 /*break*/, 90]; + case 90: + if (!(HELP_POOL === 'true')) return [3 /*break*/, 95]; + _r.label = 91; + case 91: + _r.trys.push([91, 93, , 94]); return [4 /*yield*/, axios_1["default"].get('https://api.sharecode.ga/api/jxcfd/20')]; - case 87: + case 92: data = (_r.sent()).data; console.log('获取到20个随机助力码:', data.data); shareCodes = __spreadArray(__spreadArray([], shareCodes), data.data); - return [3 /*break*/, 89]; - case 88: + return [3 /*break*/, 94]; + case 93: e_3 = _r.sent(); console.log('获取助力池失败'); - return [3 /*break*/, 89]; - case 89: return [3 /*break*/, 91]; - case 90: + return [3 /*break*/, 94]; + case 94: return [3 /*break*/, 96]; + case 95: console.log('你的设置是不帮助助力池'); - _r.label = 91; - case 91: + _r.label = 96; + case 96: i = 0; - _r.label = 92; - case 92: - if (!(i < cookiesArr.length)) return [3 /*break*/, 98]; + _r.label = 97; + case 97: + if (!(i < cookiesArr.length)) return [3 /*break*/, 103]; j = 0; - _r.label = 93; - case 93: - if (!(j < shareCodes.length)) return [3 /*break*/, 97]; + _r.label = 98; + case 98: + if (!(j < shareCodes.length)) return [3 /*break*/, 102]; cookie = cookiesArr[i]; console.log("\u8D26\u53F7" + (i + 1) + "\u53BB\u52A9\u529B:", shareCodes[j]); return [4 /*yield*/, api('story/helpbystage', '_cfd_t,bizCode,dwEnv,ptag,source,strShareId,strZone', { strShareId: shareCodes[j] })]; - case 94: + case 99: res = _r.sent(); console.log('助力:', res); if (res.iRet === 2232 || res.sErrMsg === '今日助力次数达到上限,明天再来帮忙吧~') { - return [3 /*break*/, 97]; + return [3 /*break*/, 102]; } - return [4 /*yield*/, wait(3000)]; - case 95: + return [4 /*yield*/, TS_USER_AGENTS_1.wait(3000)]; + case 100: _r.sent(); - _r.label = 96; - case 96: + _r.label = 101; + case 101: j++; - return [3 /*break*/, 93]; - case 97: + return [3 /*break*/, 98]; + case 102: i++; - return [3 /*break*/, 92]; - case 98: return [2 /*return*/]; + return [3 /*break*/, 97]; + case 103: return [2 /*return*/]; } }); }); })(); @@ -561,7 +584,6 @@ function makeShareCodes() { console.log('提交失败!已提交farm和bean的cookie才可提交cfd'); resolve(); })["catch"](function (e) { - console.log(e); reject('访问助力池出错'); }); return [2 /*return*/]; @@ -647,19 +669,6 @@ function decrypt(stk, url) { var hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex); return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")); } -function requireConfig() { - return new Promise(function (resolve) { - console.log('开始获取配置文件\n'); - var jdCookieNode = require('./jdCookie.js'); - Object.keys(jdCookieNode).forEach(function (item) { - if (jdCookieNode[item]) { - cookiesArr.push(jdCookieNode[item]); - } - }); - console.log("\u5171" + cookiesArr.length + "\u4E2A\u4EAC\u4E1C\u8D26\u53F7\n"); - resolve(); - }); -} function generateFp() { var e = "0123456789"; var a = 13; @@ -674,14 +683,4 @@ function getQueryString(url, name) { if (r != null) return unescape(r[2]); return ''; -} -function wait(t) { - return new Promise(function (resolve) { - setTimeout(function () { - resolve(); - }, t); - }); -} -function getRandomNumberByRange(start, end) { - return Math.floor(Math.random() * (end - start) + start); } \ No newline at end of file diff --git a/jd_cfd_cashOut.js b/jd_cfd_cashOut.js new file mode 100755 index 0000000..94613c6 --- /dev/null +++ b/jd_cfd_cashOut.js @@ -0,0 +1,421 @@ +"use strict"; +/** + * 提现金额,可选0.1 0.5 1 2 10 + * export CFD_CASHOUT_MONEY=0.1 + * + * 解锁提现方式二选一:1.升级1个建筑(优先) 2.完成日常任务 + * 自动模拟提现token,不需要抓包 + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var date_fns_1 = require("date-fns"); +var axios_1 = require("axios"); +var ts_md5_1 = require("ts-md5"); +var TS_USER_AGENTS_1 = require("./TS_USER_AGENTS"); +var dotenv = require("dotenv"); +var CryptoJS = require('crypto-js'); +var notify = require('./sendNotify'); +dotenv.config(); +var appId = 10028, fingerprint, token = '', enCryptMethodJD; +var cookie = '', res = '', UserName, index; +var money = process.env.CFD_CASHOUT_MONEY ? parseFloat(process.env.CFD_CASHOUT_MONEY) * 100 : 10; +!(function () { return __awaiter(void 0, void 0, void 0, function () { + var cookiesArr, i, _a, isLogin, nickName, finish, _i, _b, b, j, _c, _d, b, strDT, strMyShareId, _e, _f, e, employ, tasks, _g, _h, t, token_1; + return __generator(this, function (_j) { + switch (_j.label) { + case 0: return [4 /*yield*/, requestAlgo()]; + case 1: + _j.sent(); + return [4 /*yield*/, TS_USER_AGENTS_1.requireConfig()]; + case 2: + cookiesArr = _j.sent(); + i = 0; + _j.label = 3; + case 3: + if (!(i < cookiesArr.length)) return [3 /*break*/, 44]; + cookie = cookiesArr[i]; + UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)[1]); + index = i + 1; + return [4 /*yield*/, TS_USER_AGENTS_1.TotalBean(cookie)]; + case 4: + _a = _j.sent(), isLogin = _a.isLogin, nickName = _a.nickName; + if (!isLogin) { + notify.sendNotify(__filename.split('/').pop(), "cookie\u5DF2\u5931\u6548\n\u4EAC\u4E1C\u8D26\u53F7" + index + "\uFF1A" + (nickName || UserName)); + return [3 /*break*/, 43]; + } + console.log("\n\u5F00\u59CB\u3010\u4EAC\u4E1C\u8D26\u53F7" + index + "\u3011" + (nickName || UserName) + "\n"); + finish = false; + _i = 0, _b = ['food', 'fun', 'shop', 'sea']; + _j.label = 5; + case 5: + if (!(_i < _b.length)) return [3 /*break*/, 9]; + b = _b[_i]; + return [4 /*yield*/, api('user/GetBuildInfo', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', { strBuildIndex: b })]; + case 6: + res = _j.sent(); + if (!(res.dwCanLvlUp === 1)) return [3 /*break*/, 8]; + return [4 /*yield*/, api('user/BuildLvlUp', '_cfd_t,bizCode,ddwCostCoin,dwEnv,ptag,source,strBuildIndex,strZone', { ddwCostCoin: res.ddwNextLvlCostCoin, strBuildIndex: b })]; + case 7: + res = _j.sent(); + if (res.iRet === 0) { + console.log("\u5347\u7EA7\u6210\u529F:", res); // ddwSendRichValue + finish = true; + return [3 /*break*/, 9]; + } + _j.label = 8; + case 8: + _i++; + return [3 /*break*/, 5]; + case 9: + if (!!finish) return [3 /*break*/, 38]; + j = 0; + _j.label = 10; + case 10: + if (!(j < 2)) return [3 /*break*/, 16]; + _c = 0, _d = ['food', 'fun', 'shop', 'sea']; + _j.label = 11; + case 11: + if (!(_c < _d.length)) return [3 /*break*/, 15]; + b = _d[_c]; + return [4 /*yield*/, api('user/CollectCoin', '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strBuildIndex,strZone', { strBuildIndex: b, dwType: '1' })]; + case 12: + res = _j.sent(); + console.log(b + "\u6536\u91D1\u5E01:", res.ddwCoin); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(500)]; + case 13: + _j.sent(); + _j.label = 14; + case 14: + _c++; + return [3 /*break*/, 11]; + case 15: + j++; + return [3 /*break*/, 10]; + case 16: + if (!1) return [3 /*break*/, 19]; + return [4 /*yield*/, speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strBuildIndex,strZone')]; + case 17: + res = _j.sent(); + console.log('今日热气球:', res.dwTodaySpeedPeople); + if (res.dwTodaySpeedPeople >= 20) + return [3 /*break*/, 19]; + return [4 /*yield*/, TS_USER_AGENTS_1.wait(300)]; + case 18: + _j.sent(); + return [3 /*break*/, 16]; + case 19: return [4 /*yield*/, api('user/ComposeGameState', '', { dwFirst: 1 })]; + case 20: + res = _j.sent(); + strDT = res.strDT, strMyShareId = res.strMyShareId; + return [4 /*yield*/, api('user/RealTmReport', '', { dwIdentityType: 0, strBussKey: 'composegame', strMyShareId: strMyShareId, ddwCount: 5 })]; + case 21: + res = _j.sent(); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(1000)]; + case 22: + _j.sent(); + return [4 /*yield*/, api('user/ComposeGameAddProcess', '__t,strBT,strZone', { __t: Date.now(), strBT: strDT })]; + case 23: + res = _j.sent(); + return [4 /*yield*/, api('user/EmployTourGuideInfo', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; + case 24: + res = _j.sent(); + if (!!res.TourGuideList) return [3 /*break*/, 25]; + console.log('手动雇佣4个试用导游'); + return [3 /*break*/, 30]; + case 25: + _e = 0, _f = res.TourGuideList; + _j.label = 26; + case 26: + if (!(_e < _f.length)) return [3 /*break*/, 30]; + e = _f[_e]; + if (!(e.strBuildIndex !== 'food' && e.ddwRemainTm === 0)) return [3 /*break*/, 29]; + return [4 /*yield*/, api('user/EmployTourGuide', '_cfd_t,bizCode,ddwConsumeCoin,dwEnv,dwIsFree,ptag,source,strBuildIndex,strZone', { ddwConsumeCoin: e.ddwCostCoin, dwIsFree: 0, strBuildIndex: e.strBuildIndex })]; + case 27: + employ = _j.sent(); + if (employ.iRet === 0) + console.log("\u96C7\u4F63" + e.strBuildIndex + "\u5BFC\u6E38\u6210\u529F"); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(300)]; + case 28: + _j.sent(); + _j.label = 29; + case 29: + _e++; + return [3 /*break*/, 26]; + case 30: + tasks = void 0; + return [4 /*yield*/, api('story/GetActTask', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; + case 31: + tasks = _j.sent(); + _g = 0, _h = tasks.Data.TaskList; + _j.label = 32; + case 32: + if (!(_g < _h.length)) return [3 /*break*/, 36]; + t = _h[_g]; + if (!(t.dwCompleteNum === t.dwTargetNum && t.dwAwardStatus === 2)) return [3 /*break*/, 35]; + return [4 /*yield*/, api('Award', '_cfd_t,bizCode,dwEnv,ptag,source,strZone,taskId', { taskId: t.ddwTaskId })]; + case 33: + res = _j.sent(); + if (res.ret === 0) { + console.log(t.strTaskName + "\u9886\u5956\u6210\u529F:", res.data.prizeInfo); + } + return [4 /*yield*/, TS_USER_AGENTS_1.wait(300)]; + case 34: + _j.sent(); + _j.label = 35; + case 35: + _g++; + return [3 /*break*/, 32]; + case 36: return [4 /*yield*/, api('story/ActTaskAward', '_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; + case 37: + res = _j.sent(); + console.log('100财富任务完成:', res); + _j.label = 38; + case 38: + // 提现 + console.log('开始提现:', date_fns_1.format(new Date(), 'hh:mm:ss:SSS')); + return [4 /*yield*/, getJxToken(cookie)]; + case 39: + token_1 = _j.sent(); + console.log(token_1); + return [4 /*yield*/, api('user/CashOutQuali', '_cfd_t,bizCode,dwEnv,ptag,source,strPgUUNum,strPgtimestamp,strPhoneID,strZone', { strPgUUNum: token_1.strPgUUNum, strPgtimestamp: token_1.strPgtimestamp, strPhoneID: token_1.strPhoneID })]; + case 40: + res = _j.sent(); + console.log('资格:', res); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(2000)]; + case 41: + _j.sent(); + return [4 /*yield*/, api('user/CashOut', '_cfd_t,bizCode,ddwMoney,ddwPaperMoney,dwEnv,ptag,source,strPgUUNum,strPgtimestamp,strPhoneID,strZone', { ddwMoney: money, ddwPaperMoney: money * 10, strPgUUNum: token_1.strPgUUNum, strPgtimestamp: token_1.strPgtimestamp, strPhoneID: token_1.strPhoneID })]; + case 42: + res = _j.sent(); + console.log('提现:', res); + _j.label = 43; + case 43: + i++; + return [3 /*break*/, 3]; + case 44: return [2 /*return*/]; + } + }); +}); })(); +function getJxToken(cookie) { + function generateStr(input) { + var src = 'abcdefghijklmnopqrstuvwxyz1234567890'; + var res = ''; + for (var i = 0; i < input; i++) { + res += src[Math.floor(src.length * Math.random())]; + } + return res; + } + return new Promise(function (resolve) { + var phoneId = generateStr(40); + var timestamp = Date.now().toString(); + if (!cookie['match'](/pt_pin=([^; ]+)(?=;?)/)) { + console.log('此账号cookie填写不规范,你的pt_pin=xxx后面没分号(;)\n'); + resolve({}); + } + var nickname = cookie.match(/pt_pin=([^;]*)/)[1]; + var jstoken = ts_md5_1.Md5.hashStr('' + decodeURIComponent(nickname) + timestamp + phoneId + 'tPOamqCuk9NLgVPAljUyIHcPRmKlVxDy'); + resolve({ + 'strPgtimestamp': timestamp, + 'strPhoneID': phoneId, + 'strPgUUNum': jstoken + }); + }); +} +function api(fn, stk, params) { + var _this = this; + if (params === void 0) { params = {}; } + return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () { + var url, key, data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + url = "https://m.jingxi.com/jxbfd/" + fn + "?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=" + Date.now() + "&ptag=138631.26.55&_ste=1&_=" + Date.now() + "&sceneval=2&_stk=" + encodeURIComponent(stk); + if (['GetUserTaskStatusList', 'Award', 'DoTask'].includes(fn)) { + console.log('api2'); + url = "https://m.jingxi.com/newtasksys/newtasksys_front/" + fn + "?strZone=jxbfd&bizCode=jxbfddch&source=jxbfd&dwEnv=7&_cfd_t=" + Date.now() + "&ptag=138631.26.55&_stk=" + encodeURIComponent(stk) + "&_ste=1&_=" + Date.now() + "&sceneval=2"; + } + if (Object.keys(params).length !== 0) { + key = void 0; + for (key in params) { + if (params.hasOwnProperty(key)) + url += "&" + key + "=" + params[key]; + } + } + url += '&h5st=' + decrypt(stk, url); + return [4 /*yield*/, axios_1["default"].get(url, { + headers: { + Cookie: cookie, + Referer: "https://st.jingxi.com/fortune_island/index.html?ptag=138631.26.55", + Host: "m.jingxi.com", + "User-Agent": "jdpingou" + } + })]; + case 1: + data = (_a.sent()).data; + resolve(data); + return [2 /*return*/]; + } + }); + }); }); +} +function speedUp(stk) { + var _this = this; + return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { + var url, data, e_1; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + url = "https://m.jingxi.com/jxbfd/user/SpeedUp?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=" + Date.now() + "&ptag=&strBuildIndex=food&_ste=1&_=" + Date.now() + "&sceneval=2&_stk=" + encodeURIComponent(stk); + url += '&h5st=' + decrypt(stk, url); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, axios_1["default"].get(url, { + headers: { + 'Host': 'm.jingxi.com', + 'Referer': 'https://st.jingxi.com/', + 'User-Agent': TS_USER_AGENTS_1["default"], + 'Cookie': cookie + } + })]; + case 2: + data = (_a.sent()).data; + resolve(data); + return [3 /*break*/, 4]; + case 3: + e_1 = _a.sent(); + reject(502); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); }); +} +function requestAlgo() { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, generateFp()]; + case 1: + fingerprint = _a.sent(); + return [2 /*return*/, new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () { + var data, enCryptMethodJDString; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, axios_1["default"].post('https://cactus.jd.com/request_algo?g_ty=ajax', { + "version": "1.0", + "fp": fingerprint, + "appId": appId, + "timestamp": Date.now(), + "platform": "web", + "expandParams": "" + }, { + "headers": { + 'Authority': 'cactus.jd.com', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'Accept': 'application/json', + 'User-Agent': TS_USER_AGENTS_1["default"], + 'Content-Type': 'application/json', + 'Origin': 'https://st.jingxi.com', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://st.jingxi.com/', + 'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7' + } + })]; + case 1: + data = (_a.sent()).data; + if (data['status'] === 200) { + token = data.data.result.tk; + console.log('token:', token); + enCryptMethodJDString = data.data.result.algo; + if (enCryptMethodJDString) + enCryptMethodJD = new Function("return " + enCryptMethodJDString)(); + } + else { + console.log("fp: " + fingerprint); + console.log('request_algo 签名参数API请求失败:'); + } + resolve(); + return [2 /*return*/]; + } + }); + }); })]; + } + }); + }); +} +function decrypt(stk, url) { + var timestamp = (date_fns_1.format(new Date(), 'yyyyMMddhhmmssSSS')); + var hash1; + if (fingerprint && token && enCryptMethodJD) { + hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex); + } + else { + var random = '5gkjB6SpmC9s'; + token = "tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc"; + fingerprint = 9686767825751161; + // $.fingerprint = 7811850938414161; + var str = "" + token + fingerprint + timestamp + appId + random; + hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex); + } + var st = ''; + stk.split(',').map(function (item, index) { + st += item + ":" + getQueryString(url, item) + (index === stk.split(',').length - 1 ? '' : '&'); + }); + var hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex); + return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")); +} +function generateFp() { + var e = "0123456789"; + var a = 13; + var i = ''; + for (; a--;) + i += e[Math.random() * e.length | 0]; + return (i + Date.now()).slice(0, 16); +} +function getQueryString(url, name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var r = url.split('?')[1].match(reg); + if (r != null) + return unescape(r[2]); + return ''; +} \ No newline at end of file diff --git a/jd_cfd_loop.js b/jd_cfd_loop.js new file mode 100755 index 0000000..4a5ed9b --- /dev/null +++ b/jd_cfd_loop.js @@ -0,0 +1,297 @@ +"use strict"; +/** + * 财富岛热气球挂后台 + * export CFD_LOOP_DELAY=20000 // 捡气球间隔时间,单位毫秒 + */ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var date_fns_1 = require("date-fns"); +var axios_1 = require("axios"); +var TS_USER_AGENTS_1 = require("./TS_USER_AGENTS"); +var dotenv = require("dotenv"); +var CryptoJS = require('crypto-js'); +var crypto = require('crypto'); +var fs = require('fs'); +var notify = require('./sendNotify'); +dotenv.config(); +var appId = 10028, fingerprint, token, enCryptMethodJD; +var cookie = '', res = ''; +process.env.CFD_LOOP_DELAY ? console.log('设置延迟:', parseInt(process.env.CFD_LOOP_DELAY)) : console.log('设置延迟:10000~25000随机'); +var UserName, index; +!(function () { return __awaiter(void 0, void 0, void 0, function () { + var cookiesArr, filename, stream, fsHash, i, _a, isLogin, nickName, shell, _i, _b, s, j, e_1, t; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, requestAlgo()]; + case 1: + _c.sent(); + return [4 /*yield*/, TS_USER_AGENTS_1.requireConfig()]; + case 2: + cookiesArr = _c.sent(); + filename = __filename.split('/').pop(); + stream = fs.createReadStream(filename); + fsHash = crypto.createHash('md5'); + stream.on('data', function (d) { + fsHash.update(d); + }); + stream.on('end', function () { + var md5 = fsHash.digest('hex'); + console.log(filename + "\u7684MD5\u662F:", md5); + if (filename.indexOf('JDHelloWorld_jd_scripts_') > -1) { + filename = filename.replace('JDHelloWorld_jd_scripts_', ''); + } + axios_1["default"].get('https://api.sharecode.ga/api/md5?filename=' + filename) + .then(function (res) { + console.log('local: ', md5); + console.log('remote:', res.data); + if (md5 !== res.data) { + notify.sendNotify("Warning", filename + "\nMD5\u6821\u9A8C\u5931\u8D25\uFF01\u4F60\u7684\u811A\u672C\u7591\u4F3C\u88AB\u7BE1\u6539\uFF01"); + } + else { + console.log('MD5校验通过!'); + } + })["catch"](function () { + }); + }); + _c.label = 3; + case 3: + if (!1) return [3 /*break*/, 20]; + i = 0; + _c.label = 4; + case 4: + if (!(i < cookiesArr.length)) return [3 /*break*/, 18]; + cookie = cookiesArr[i]; + UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)[1]); + index = i + 1; + return [4 /*yield*/, TS_USER_AGENTS_1.TotalBean(cookie)]; + case 5: + _a = _c.sent(), isLogin = _a.isLogin, nickName = _a.nickName; + if (!isLogin) { + notify.sendNotify(__filename.split('/').pop(), "cookie\u5DF2\u5931\u6548\n\u4EAC\u4E1C\u8D26\u53F7" + index + "\uFF1A" + (nickName || UserName)); + return [3 /*break*/, 17]; + } + console.log("\n\u5F00\u59CB\u3010\u4EAC\u4E1C\u8D26\u53F7" + index + "\u3011" + (nickName || UserName) + "\n"); + _c.label = 6; + case 6: + _c.trys.push([6, 16, , 17]); + return [4 /*yield*/, speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strBuildIndex,strZone')]; + case 7: + res = _c.sent(); + if (res.iRet !== 0) { + console.log('手动建造4个房子'); + return [3 /*break*/, 17]; + } + console.log('今日热气球:', res.dwTodaySpeedPeople, '/', 20); + return [4 /*yield*/, speedUp('_cfd_t,bizCode,dwEnv,ptag,source,strZone')]; + case 8: + shell = _c.sent(); + if (!shell.Data.hasOwnProperty('NormShell')) return [3 /*break*/, 15]; + _i = 0, _b = shell.Data.NormShell; + _c.label = 9; + case 9: + if (!(_i < _b.length)) return [3 /*break*/, 15]; + s = _b[_i]; + j = 0; + _c.label = 10; + case 10: + if (!(j < s.dwNum)) return [3 /*break*/, 14]; + return [4 /*yield*/, speedUp('_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone', s.dwType)]; + case 11: + res = _c.sent(); + if (res.iRet !== 0) { + console.log(res); + return [3 /*break*/, 14]; + } + console.log('捡贝壳:', res.Data.strFirstDesc); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(500)]; + case 12: + _c.sent(); + _c.label = 13; + case 13: + j++; + return [3 /*break*/, 10]; + case 14: + _i++; + return [3 /*break*/, 9]; + case 15: return [3 /*break*/, 17]; + case 16: + e_1 = _c.sent(); + console.log(e_1); + return [3 /*break*/, 17]; + case 17: + i++; + return [3 /*break*/, 4]; + case 18: + t = process.env.CFD_LOOP_DELAY ? parseInt(process.env.CFD_LOOP_DELAY) : TS_USER_AGENTS_1.getRandomNumberByRange(1000 * 10, 1000 * 30); + return [4 /*yield*/, TS_USER_AGENTS_1.wait(t)]; + case 19: + _c.sent(); + return [3 /*break*/, 3]; + case 20: return [2 /*return*/]; + } + }); +}); })(); +function speedUp(stk, dwType) { + var _this = this; + return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () { + var url, data, e_2; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + url = "https://m.jingxi.com/jxbfd/user/SpeedUp?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=" + Date.now() + "&ptag=&strBuildIndex=food&_ste=1&_=" + Date.now() + "&sceneval=2&_stk=" + encodeURIComponent(stk); + if (stk === '_cfd_t,bizCode,dwEnv,ptag,source,strZone') + url = "https://m.jingxi.com/jxbfd/story/queryshell?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=" + Date.now() + "&ptag=&_stk=_cfd_t%2CbizCode%2CdwEnv%2Cptag%2Csource%2CstrZone&_ste=1&_=" + Date.now() + "&sceneval=2"; + if (stk === '_cfd_t,bizCode,dwEnv,dwType,ptag,source,strZone') + url = "https://m.jingxi.com/jxbfd/story/pickshell?strZone=jxbfd&bizCode=jxbfd&source=jxbfd&dwEnv=7&_cfd_t=" + Date.now() + "&ptag=&dwType=" + dwType + "&_stk=_cfd_t%2CbizCode%2CdwEnv%2CdwType%2Cptag%2Csource%2CstrZone&_ste=1&_=" + Date.now() + "&sceneval=2"; + url += '&h5st=' + decrypt(stk, url); + _a.label = 1; + case 1: + _a.trys.push([1, 3, , 4]); + return [4 /*yield*/, axios_1["default"].get(url, { + headers: { + 'Host': 'm.jingxi.com', + 'Referer': 'https://st.jingxi.com/', + 'User-Agent': TS_USER_AGENTS_1["default"], + 'Cookie': cookie + } + })]; + case 2: + data = (_a.sent()).data; + resolve(data); + return [3 /*break*/, 4]; + case 3: + e_2 = _a.sent(); + reject(502); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/]; + } + }); + }); }); +} +function requestAlgo() { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, generateFp()]; + case 1: + fingerprint = _a.sent(); + return [2 /*return*/, new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () { + var data, enCryptMethodJDString; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, axios_1["default"].post('https://cactus.jd.com/request_algo?g_ty=ajax', { + "version": "1.0", + "fp": fingerprint, + "appId": appId, + "timestamp": Date.now(), + "platform": "web", + "expandParams": "" + }, { + "headers": { + 'Authority': 'cactus.jd.com', + 'Pragma': 'no-cache', + 'Cache-Control': 'no-cache', + 'Accept': 'application/json', + 'User-Agent': TS_USER_AGENTS_1["default"], + 'Content-Type': 'application/json', + 'Origin': 'https://st.jingxi.com', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'https://st.jingxi.com/', + 'Accept-Language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7' + } + })]; + case 1: + data = (_a.sent()).data; + if (data['status'] === 200) { + token = data.data.result.tk; + enCryptMethodJDString = data.data.result.algo; + if (enCryptMethodJDString) + enCryptMethodJD = new Function("return " + enCryptMethodJDString)(); + } + else { + console.log("fp: " + fingerprint); + console.log('request_algo 签名参数API请求失败:'); + } + resolve(200); + return [2 /*return*/]; + } + }); + }); })]; + } + }); + }); +} +function decrypt(stk, url) { + var timestamp = (date_fns_1.format(new Date(), 'yyyyMMddhhmmssSSS')); + var hash1; + if (fingerprint && token && enCryptMethodJD) { + hash1 = enCryptMethodJD(token, fingerprint.toString(), timestamp.toString(), appId.toString(), CryptoJS).toString(CryptoJS.enc.Hex); + } + else { + var random = '5gkjB6SpmC9s'; + token = "tk01wcdf61cb3a8nYUtHcmhSUFFCfddDPRvKvYaMjHkxo6Aj7dhzO+GXGFa9nPXfcgT+mULoF1b1YIS1ghvSlbwhE0Xc"; + fingerprint = 9686767825751161; + // $.fingerprint = 7811850938414161; + var str = "" + token + fingerprint + timestamp + appId + random; + hash1 = CryptoJS.SHA512(str, token).toString(CryptoJS.enc.Hex); + } + var st = ''; + stk.split(',').map(function (item, index) { + st += item + ":" + getQueryString(url, item) + (index === stk.split(',').length - 1 ? '' : '&'); + }); + var hash2 = CryptoJS.HmacSHA256(st, hash1.toString()).toString(CryptoJS.enc.Hex); + return encodeURIComponent(["".concat(timestamp.toString()), "".concat(fingerprint.toString()), "".concat(appId.toString()), "".concat(token), "".concat(hash2)].join(";")); +} +function generateFp() { + var e = "0123456789"; + var a = 13; + var i = ''; + for (; a--;) + i += e[Math.random() * e.length | 0]; + return (i + Date.now()).slice(0, 16); +} +function getQueryString(url, name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var r = url.split('?')[1].match(reg); + if (r != null) + return unescape(r[2]); + return ''; +} \ No newline at end of file diff --git a/jd_yili_cow.js b/jd_yili_cow.js new file mode 100755 index 0000000..ed855a0 --- /dev/null +++ b/jd_yili_cow.js @@ -0,0 +1,308 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var axios_1 = require("axios"); +var TS_USER_AGENTS_1 = require("./TS_USER_AGENTS"); +var dotenv = require("dotenv"); +var notify = require('./sendNotify'); +dotenv.config(); +var token, token2, actorUuid, shopId, pin, uuid; +var milk; +var cookie = '', res = '', UserName, index; +function main() { + var _a, _b; + return __awaiter(this, void 0, void 0, function () { + var cookiesArr, i, _c, isLogin, nickName, j, taskArr, _i, taskArr_1, t, e_1; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: return [4 /*yield*/, TS_USER_AGENTS_1.requireConfig()]; + case 1: + cookiesArr = _d.sent(); + i = 0; + _d.label = 2; + case 2: + if (!(i < cookiesArr.length)) return [3 /*break*/, 27]; + _d.label = 3; + case 3: + _d.trys.push([3, 25, , 26]); + cookie = cookiesArr[i]; + UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)[1]); + index = i + 1; + return [4 /*yield*/, TS_USER_AGENTS_1.TotalBean(cookie)]; + case 4: + _c = _d.sent(), isLogin = _c.isLogin, nickName = _c.nickName; + if (!isLogin) { + notify.sendNotify(__filename.split('/').pop(), "cookie\u5DF2\u5931\u6548\n\u4EAC\u4E1C\u8D26\u53F7" + index + "\uFF1A" + (nickName || UserName)); + return [3 /*break*/, 26]; + } + console.log("\n\u5F00\u59CB\u3010\u4EAC\u4E1C\u8D26\u53F7" + index + "\u3011" + (nickName || UserName) + "\n"); + return [4 /*yield*/, getIsvToken()]; + case 5: + _d.sent(); + return [4 /*yield*/, getIsvToken2()]; + case 6: + _d.sent(); + return [4 /*yield*/, init()]; + case 7: + _d.sent(); + return [4 /*yield*/, api('https://lzdz-isv.isvjcloud.com/dz/common/getSimpleActInfoVo', 'activityId=dz2103100001340201')]; + case 8: + res = _d.sent(); + shopId = res.data.venderId; + return [4 /*yield*/, api('https://lzdz-isv.isvjcloud.com/customer/getMyPing', "userId=" + shopId + "&token=" + token2 + "&fromType=APP")]; + case 9: + res = _d.sent(); + pin = res.data.secretPin; + return [4 /*yield*/, api('https://lzdz-isv.isvjcloud.com/wxActionCommon/getUserInfo', "pin=" + encodeURIComponent(pin))]; + case 10: + res = _d.sent(); + if ((_a = res.data) === null || _a === void 0 ? void 0 : _a.hasOwnProperty('id')) { + uuid = res.data.id; + } + else { + return [3 /*break*/, 26]; + } + return [4 /*yield*/, api('https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activityContent', "activityId=dz2103100001340201&pin=" + encodeURIComponent(pin) + "&pinImg=null&nick=" + cookie.match(/pt_pin=([^;]*)/)[1] + "&cjyxPin=&cjhyPin=&shareUuid=")]; + case 11: + res = _d.sent(); + actorUuid = res.data.actorUuid; + console.log('互助码:', actorUuid); + milk = res.data.score2 / 10; + j = 0; + _d.label = 12; + case 12: + if (!(j < milk)) return [3 /*break*/, 16]; + return [4 /*yield*/, api('feedCow', "activityId=dz2103100001340201&actorUuid=" + actorUuid + "&pin=" + encodeURIComponent(pin))]; + case 13: + res = _d.sent(); + if (res.result) { + console.log('喂奶成功,剩余:', res.data.score2); + } + else { + console.log('喂奶失败:', res); + return [3 /*break*/, 16]; + } + return [4 /*yield*/, TS_USER_AGENTS_1.wait(2000)]; + case 14: + _d.sent(); + _d.label = 15; + case 15: + j++; + return [3 /*break*/, 12]; + case 16: + if (!1) return [3 /*break*/, 19]; + return [4 /*yield*/, api('start', "activityId=dz2103100001340201&actorUuid=" + actorUuid + "&pin=" + encodeURIComponent(pin))]; + case 17: + res = _d.sent(); + if (res.result) { + console.log('抽奖成功:', res.data.name); + } + else if (res.errorMessage === '继续努力,多多喂养牛牛哦~') { + console.log('抽奖失败,没有抽奖机会'); + return [3 /*break*/, 19]; + } + else { + console.log('抽奖失败:', res); + return [3 /*break*/, 19]; + } + return [4 /*yield*/, TS_USER_AGENTS_1.wait(3000)]; + case 18: + _d.sent(); + return [3 /*break*/, 16]; + case 19: + taskArr = [ + { taskType: 0 }, + { taskType: 1 }, + { taskType: 12 }, + { taskType: 13, taskValue: 'ziying' }, + { taskType: 13, taskValue: 'pop' }, + { taskType: 21 }, + ]; + _i = 0, taskArr_1 = taskArr; + _d.label = 20; + case 20: + if (!(_i < taskArr_1.length)) return [3 /*break*/, 24]; + t = taskArr_1[_i]; + return [4 /*yield*/, api('saveTask', "activityId=dz2103100001340201&actorUuid=" + actorUuid + "&pin=" + encodeURIComponent(pin) + "&taskType=" + t.taskType + "&taskValue=" + ((_b = t.taskValue) !== null && _b !== void 0 ? _b : ''))]; + case 21: + res = _d.sent(); + if (res.result) + console.log('任务完成:', res.data.milkCount); + else { + console.log('任务失败:', res); + return [3 /*break*/, 24]; + } + return [4 /*yield*/, TS_USER_AGENTS_1.wait(2000)]; + case 22: + _d.sent(); + _d.label = 23; + case 23: + _i++; + return [3 /*break*/, 20]; + case 24: return [3 /*break*/, 26]; + case 25: + e_1 = _d.sent(); + console.log(e_1); + return [3 /*break*/, 26]; + case 26: + i++; + return [3 /*break*/, 2]; + case 27: return [2 /*return*/]; + } + }); + }); +} +main().then(); +function api(fn, body) { + var _this = this; + var url; + if (fn.indexOf('https://') > -1) { + url = fn; + } + else { + url = "https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/" + fn; + } + return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () { + var _a, data, headers; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, axios_1["default"].post(url, body, { + headers: { + 'Host': 'lzdz-isv.isvjcloud.com', + 'Content-Type': 'application/x-www-form-urlencoded', + 'Referer': 'https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activity', + 'User-Agent': TS_USER_AGENTS_1["default"], + 'Accept': 'application/json', + 'Origin': 'https://lzdz-isv.isvjcloud.com', + 'Cookie': cookie + } + })]; + case 1: + _a = _b.sent(), data = _a.data, headers = _a.headers; + reloadCookie(headers['set-cookie']); + resolve(data); + return [2 /*return*/]; + } + }); + }); }); +} +function getIsvToken() { + var _this = this; + return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () { + var data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, axios_1["default"].post("https://api.m.jd.com/client.action?functionId=genToken&clientVersion=10.0.2&client=android&uuid=818aa057737ba6a4&st=1623934987178&sign=0877498be29cda51b9628fa0195f412f&sv=111", "body=" + escape('{"action":"to","to":"https%3A%2F%2Fh5.m.jd.com%2FbabelDiy%2FZeus%2F3KSjXqQabiTuD1cJ28QskrpWoBKT%2Findex.html%3FbabelChannel%3D45%26collectionId%3D519"}'), { + headers: { + 'Host': 'api.m.jd.com', + 'charset': 'UTF-8', + 'User-Agent': TS_USER_AGENTS_1["default"], + 'cache-control': 'no-cache', + 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', + 'cookie': cookie + } + })]; + case 1: + data = (_a.sent()).data; + token = data.tokenKey; + resolve(); + return [2 /*return*/]; + } + }); + }); }); +} +function getIsvToken2() { + var _this = this; + return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () { + var data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, axios_1["default"].post("https://api.m.jd.com/client.action?functionId=isvObfuscator&clientVersion=10.0.2&client=android&uuid=818aa057737ba6a4&st=1623934998790&sign=e571148c8dfb456a1795d249c6aa3956&sv=100", 'body=%7B%22id%22%3A%22%22%2C%22url%22%3A%22https%3A//xinruidddj-isv.isvjcloud.com%22%7D', { + headers: { + 'Host': 'api.m.jd.com', + 'user-agent': TS_USER_AGENTS_1["default"], + 'content-type': 'application/x-www-form-urlencoded', + 'Cookie': cookie + } + })]; + case 1: + data = (_a.sent()).data; + token2 = data.token; + cookie += 'IsvToken=' + token2 + ';'; + resolve(); + return [2 /*return*/]; + } + }); + }); }); +} +function init() { + return new Promise(function (resolve) { + axios_1["default"].get("https://lzdz-isv.isvjcloud.com/dingzhi/yili/yangniu/activity", { + headers: { + 'Host': 'lzdz-isv.isvjcloud.com', + 'User-Agent': TS_USER_AGENTS_1["default"], + 'Cookie': 'IsvToken=' + token + } + }).then(function (res) { + reloadCookie(res.headers['set-cookie']); + resolve(); + }); + }); +} +function reloadCookie(setCookie) { + var cookieArr = cookie.split(';'); + cookieArr.pop(); + var cookieTEMP = {}; + for (var _i = 0, cookieArr_1 = cookieArr; _i < cookieArr_1.length; _i++) { + var ck = cookieArr_1[_i]; + cookieTEMP[ck.split('=')[0]] = ck.match(/(pt_key|pt_pin|LZ_TOKEN_KEY|LZ_TOKEN_VALUE|AUTH_C_USER|lz_jdpin_token|IsvToken)=([^;]*)/)[2]; + } + if (setCookie) { + for (var _a = 0, setCookie_1 = setCookie; _a < setCookie_1.length; _a++) { + var ck = setCookie_1[_a]; + ck = ck.split(';')[0]; + cookieTEMP[ck.split('=')[0]] = ck.match(/(pt_key|pt_pin|LZ_TOKEN_KEY|LZ_TOKEN_VALUE|AUTH_C_USER|lz_jdpin_token|IsvToken)=([^;]*)/)[2]; + } + cookie = ''; + for (var ck in cookieTEMP) { + if (cookieTEMP.hasOwnProperty(ck)) { + cookie += ck + "=" + cookieTEMP[ck] + ";"; + } + } + } +} \ No newline at end of file