shawenguan 1 tahun lalu
induk
melakukan
573002fe1e
1 mengubah file dengan 179 tambahan dan 32 penghapusan
  1. 179 32
      Scripts/168/pksPlanHelper.js

+ 179 - 32
Scripts/168/pksPlanHelper.js

@@ -6,6 +6,9 @@
 
 ^https?:\/\/.*168.*\.com\/api\/LotteryPlan\/getPksPlanList.do url script-request-body https://git.jojo21.top/shawenguan/Quantumult-X/raw/master/Scripts/168/pksPlanHelper.js
 ^https?:\/\/.*168.*\.com\/api\/LotteryPlan\/getPksPlanList.do url script-response-body https://git.jojo21.top/shawenguan/Quantumult-X/raw/master/Scripts/168/pksPlanHelper.js
+^https?:\/\/.*168.*\.com\/pks\/getLotteryPksInfo.do url script-request-body https://git.jojo21.top/shawenguan/Quantumult-X/raw/master/Scripts/168/pksPlanHelper.js
+^https?:\/\/.*168.*\.com\/pks\/getLotteryPksInfo.do url script-response-body https://git.jojo21.top/shawenguan/Quantumult-X/raw/master/Scripts/168/pksPlanHelper.js
+
 
 [MITM]
 hostname = *.168.*.com
@@ -119,14 +122,14 @@ let gExpertsRecommendToken = `jGu36jgpJJYPh6AsOGQydYj8GEKxUnvw`;
 let gExpertsRecommendHost = `n3iiz7z5p.168fxo67.com`;
 
 const gExpertsRecommendHeaders = {
-	'Cookie' : `__nxquid=xFcoBcm0I0z0zfRnkzrBrh0Z+z0ppg==0022`,
-	'Accept' : `*/*`,
-	'Connection' : `keep-alive`,
-	'Accept-Encoding' : `gzip, deflate, br`,
-	'Host' : gExpertsRecommendHost,
-	'User-Agent' : `CaiPiao/2.1.64 (iPhone; iOS 16.6.1; Scale/3.00)`,
-	'Accept-Language' : `zh-Hans-CN;q=1`,
-	'token' : gExpertsRecommendToken
+	'Cookie': `__nxquid=xFcoBcm0I0z0zfRnkzrBrh0Z+z0ppg==0022`,
+	'Accept': `*/*`,
+	'Connection': `keep-alive`,
+	'Accept-Encoding': `gzip, deflate, br`,
+	'Host': gExpertsRecommendHost,
+	'User-Agent': `CaiPiao/2.1.64 (iPhone; iOS 16.6.1; Scale/3.00)`,
+	'Accept-Language': `zh-Hans-CN;q=1`,
+	'token': gExpertsRecommendToken
 };
 
 const formatNow = () => {
@@ -138,12 +141,23 @@ async function Main() {
 	if (magicJS.isRequest) {
 		checkHandleRequest();
 	} else {
+		gLotteryCode = magicJS.data.read('168_PksPlanLotteryCode', 10058);
+
 		gBuyPlanHost = magicJS.data.read('168_PksPlanAPIHost', 'e7i.16890269.com');
 		gBuyPlanHeaders.Host = gBuyPlanHost;
 		gBuyPlanHeaders.Referer = `https://${gBuyPlanHost}/v1/html/buy_plan/buy_plan.html`;
 
-		gLotteryCode = magicJS.data.read('168_PksPlanLotteryCode', 10058);
-		let result = await checkLotteryResult();
+		gExpertsRecommendHost = magicJS.data.read('168_PksExpertsPlanAPIHost', 'n3iiz7z5p.168fxo67.com');
+		gExpertsRecommendToken = magicJS.data.read('168_PksExpertsPlanToken', 'jGu36jgpJJYPh6AsOGQydYj8GEKxUnvw');
+		gExpertsRecommendHeaders.Host = gExpertsRecommendHost;
+		gExpertsRecommendHeaders.token = gExpertsRecommendToken;
+
+		if (isPlanBuyTime()) {
+			let comPlanResult = await checkLotteryPlanBuy();
+		}
+		if (isExpertsRecommendEnabled()) {
+			let expertsResult = await checkExpertsRecommend();
+		}
 	}
 	magicJS.notification.msg('');
 	if (gRetBody) {
@@ -169,7 +183,9 @@ function checkHandleRequest() {
 				break;
 			default:
 				if (path.indexOf('/api/LotteryPlan/getPksPlanList.do') > -1) {
-					handlePksPlanList();
+					handleLotteryPksPlanList();
+				} else if (path.indexOf('/pks/getLotteryPksInfo.do') > -1) {
+					handleLotteryPksInfo();
 				}
 				break;
 		}
@@ -188,13 +204,24 @@ function getResponsePlainData() {
 	}
 }
 
-function handlePksPlanList() {
+function handleLotteryPksInfo() {
+
+}
+
+function handleLotteryPksPlanList() {
 
 }
 
 function handleHeaders() {
+	const path = $request.path;
 	let headers = $request.headers;
-	magicJS.data.write('168_PksPlanAPIHost', headers['Host']);
+	if (path.indexOf('/api/LotteryPlan/getPksPlanList.do') > -1) {
+		magicJS.data.write('168_PksPlanAPIHost', headers['Host']);
+	} else if (path.indexOf('/api/LotteryPlan/getPksPlanList.do') > -1) {
+		magicJS.data.write('168_PksExpertsPlanAPIHost', headers['Host']);
+		magicJS.data.write('168_PksExpertsPlanToken', headers['token']);
+	}
+
 }
 
 function isPlanAEnabled() {
@@ -221,6 +248,36 @@ function isPlanCEnabled() {
 	return JSON.parse(flag);
 }
 
+function isPlanBuyTime() {
+	const timeRanges = [
+		{ start: '10:55', end: '15:00' },
+		{ start: '17:55', end: '23:50' },
+		{ start: '01:00', end: '03:30' }
+	];
+	for (const range of timeRanges) {
+		if (isInTimeRange(range.start, range.end)) {
+			return true;
+		}
+	}
+	return false;
+}
+
+function isInTimeRange(start, end) {
+	const now = new Date();
+	const startTime = new Date(now.toDateString() + ' ' + start);
+	const endTime = new Date(now.toDateString() + ' ' + end);
+	return now >= startTime && now <= endTime;
+}
+
+
+function isExpertsRecommendEnabled() {
+	let flag = magicJS.data.read('168_PksExpertsRecommendEnabled', null);
+	if (flag == null) {
+		return false;
+	}
+	return JSON.parse(flag);
+}
+
 function isPlanLotteryAutoBet() {
 	let flag = magicJS.data.read('168_PksPlanLotteryAutoBet', null);
 	if (flag == null) {
@@ -307,7 +364,7 @@ async function getHtmlContent(url, headers) {
 	return result;
 }
 
-async function checkLotteryResult() {
+async function checkLotteryPlanBuy() {
 	// let htmlUrl = `https://${gBuyPlanHost}/v1/html/buy_plan/buy_plan.html`;
 	// let htmlContent = await getHtmlContent(htmlUrl, gBuyPlanHeaders);
 
@@ -424,7 +481,7 @@ async function checkEvilDragonCSlayingNotify(failItem, pksPlanListData) {
 			let turnOneCost = Math.pow(2, turnCount - 1);
 			let maxBetAmount = getPlanLotteryMaxBetAmount();
 			if (turnCount <= maxTurnCount) {
-				let betRet = await tryDragonBet(latestItem.preDrawIssue, failItem.planC, turnOneCost, maxBetAmount);
+				let betRet = await tryDragonBet(latestItem.preDrawIssue, 1, failItem.planC, turnOneCost, maxBetAmount);
 			}
 		}
 		magicJS.notification.appendNotifyInfo(tipsMsg);
@@ -452,7 +509,7 @@ async function checkEvilDragonBSlayingNotify(failItem, pksPlanListData) {
 			let turnOneCost = Math.pow(2, turnCount - 1);
 			let maxBetAmount = getPlanLotteryMaxBetAmount();
 			if (turnCount <= maxTurnCount) {
-				let betRet = await tryDragonBet(latestItem.preDrawIssue, failItem.planB, turnOneCost, maxBetAmount);
+				let betRet = await tryDragonBet(latestItem.preDrawIssue, 1, failItem.planB, turnOneCost, maxBetAmount);
 			}
 		}
 		magicJS.notification.appendNotifyInfo(tipsMsg);
@@ -480,7 +537,7 @@ async function checkEvilDragonASlayingNotify(failItem, pksPlanListData) {
 			let turnOneCost = Math.pow(2, turnCount - 1);
 			let maxBetAmount = getPlanLotteryMaxBetAmount();
 			if (turnCount <= maxTurnCount) {
-				let betRet = await tryDragonBet(latestItem.preDrawIssue, failItem.planA, turnOneCost, maxBetAmount);
+				let betRet = await tryDragonBet(latestItem.preDrawIssue, 1, failItem.planA, turnOneCost, maxBetAmount);
 			}
 		}
 		magicJS.notification.appendNotifyInfo(tipsMsg);
@@ -633,7 +690,7 @@ async function checkPlanCBuyNotify(pksPlanItemData, pksPlanListData) {
 		let proAllowValue = getAllowBetProbability('C');
 		if (probability >= proAllowValue) {
 			let maxBetAmount = getPlanLotteryMaxBetAmount();
-			let betRet = await tryDragonBet(preDrawIssue, planC, turnOneCost, maxBetAmount);
+			let betRet = await tryDragonBet(preDrawIssue, 1, planC, turnOneCost, maxBetAmount);
 			tipsMsg += `\n预估中奖率:${probability.toFixed(2)}`;
 			tipsMsg += analyseLogMsg;
 		} else {
@@ -693,7 +750,7 @@ async function checkPlanBBuyNotify(pksPlanItemData, pksPlanListData) {
 		let proAllowValue = getAllowBetProbability('B');
 		if (probability >= proAllowValue) {
 			let maxBetAmount = getPlanLotteryMaxBetAmount();
-			let betRet = await tryDragonBet(preDrawIssue, planB, turnOneCost, maxBetAmount);
+			let betRet = await tryDragonBet(preDrawIssue, 1, planB, turnOneCost, maxBetAmount);
 			tipsMsg += analyseLogMsg;
 			tipsMsg += `\n预估中奖率:${probability.toFixed(2)}`;
 		} else {
@@ -753,7 +810,7 @@ async function checkPlanABuyNotify(pksPlanItemData, pksPlanListData) {
 		let proAllowValue = getAllowBetProbability('A');
 		if (probability >= proAllowValue) {
 			let maxBetAmount = getPlanLotteryMaxBetAmount();
-			let betRet = await tryDragonBet(preDrawIssue, planA, turnOneCost, maxBetAmount);
+			let betRet = await tryDragonBet(preDrawIssue, 1, planA, turnOneCost, maxBetAmount);
 			tipsMsg += analyseLogMsg;
 			tipsMsg += `\n预估中奖率:${probability.toFixed(2)}`;
 		} else {
@@ -885,10 +942,87 @@ async function getPksPlanItem(lotCode) {
 	return result.result.data;
 }
 
+async function checkExpertsRecommend() {
+	let userName = magicJS.data.read('168_PksExpertUserName', null);
+	if (!userName || userName.length == 0) {
+		magicJS.logger.info(`请设置你喜欢的专家名字`);
+		return;
+	}
+	userName = userName.trim();
+	let groupCode = 1;
+	let ranking = magicJS.data.read('168_PksExpertRecommendRanking', 1);
+	let recommendList = await getExpertsRecommendList(gLotteryCode, groupCode, ranking);
+	let expectList = [];
+	let expectItem = null;
+	for (let i = 0; i < recommendList.length; i++) {
+		const item = recommendList[i];
+		const recommendCount = item.recommendCount;
+		if (recommendCount <= 5) {
+			expectList.push(item);
+			if (item.userName.indexOf(item.userName) > -1) {
+				expectItem = item;
+			}
+		}
+	}
+	if (!expectItem) {
+		return;
+	}
+	let prValue = parseInt(expectItem.winningProbability);
+	if (prValue < 80) {
+		let indexKey = 'winningProbability';
+		expectList.sort((a, b) => {
+			if (b[indexKey] == a[indexKey]) {
+				return 0;
+			} else if (b[indexKey] > a[indexKey]) {
+				return 1;
+			} else {
+				return -1;
+			}
+		});
+		expectItem = expectList[0];
+		if (!expectItem) {
+			return;
+		}
+		prValue = parseInt(expectItem.winningProbability);
+		if (prValue < 80) {
+			magicJS.data.read('168_PksExpertUserName', null);
+			return;
+		}
+	}
+	let planDetail = await getExpertsRecommendDetail(expectItem.userId, gLotteryCode, groupCode, ranking);
+	if (!planDetail) {
+		return;
+	}
+	let latestItem = planDetail.head;
+	let turnOneCost = Math.pow(2, latestItem.rank - 1);
+	let recommendCode = latestItem.recommendCode;
+	let maxBetAmount = getPlanLotteryMaxBetAmount();
 
-async function getExpertsRecommendList(lotCode, groupCode=1, ranking=1, field='winningProbability') {
+	let tipsMsg = `专家[${latestItem.userName}]推荐${latestItem.recommendTypeDesc}:${recommendCode} 准确率:${latestItem.winningProbability} 期数:${latestItem.rank} 期号:${latestItem.preDrawIssue}`;
+	magicJS.logger.info(tipsMsg);
+
+	if (isPlanLotteryAutoBet()) {
+		let betRet = await tryDragonBet(latestItem.preDrawIssue, ranking, recommendCode, turnOneCost, maxBetAmount);
+	}
+	magicJS.notification.appendNotifyInfo(tipsMsg);
+}
+
+async function getExpertsRecommendList(lotCode, groupCode = 1, ranking = 1, field = 'winningProbability') {
+	/**
+	 * type
+	 * 0=定码
+	 * 1=杀码
+	 * 2=大小
+	 * 3=单收
+	 * 4=龙虎
+	 */
+	/**
+	 * field
+	 * winningProbability=准确率
+	 * continuousWin=当前连中
+	 */
 	const reqData = {
-		lotCode:lotCode,
+		lotCode: lotCode,
 		groupCode: groupCode,
 		ranking: ranking,
 		field: field,
@@ -938,10 +1072,10 @@ async function getExpertsRecommendList(lotCode, groupCode=1, ranking=1, field='w
 	return result.result.data;
 }
 
-async function getExpertsRecommendDetail(userId, lotCode, groupCode=1, ranking=1) {
+async function getExpertsRecommendDetail(userId, lotCode, groupCode = 1, ranking = 1) {
 	const reqData = {
 		userId: userId,
-		lotCode:lotCode,
+		lotCode: lotCode,
 		groupCode: groupCode,
 		ranking: ranking,
 		type: 0,
@@ -990,12 +1124,12 @@ async function getExpertsRecommendDetail(userId, lotCode, groupCode=1, ranking=1
 	return result.result.data;
 }
 
-async function getLotteryPksInfo(lotCode) {
+async function getLotteryPksInfo(lotCode, token = `tpM9v7lYiy0ctYv9AOlaztoyUcH9y/YR2Gt2jQT8dBd1edkFSV8Vuu%2BQ00/kNgeeksf`) {
 	const reqData = {
 		iOSVersion: '2.1.64',
 		lotCode: lotCode,
+		token: token,
 		s: '168noadv',
-		token: `tpM9v7lYiy0ctYv9AOlaztoyUcH9y/YR2Gt2jQT8dBd1edkFSV8Vuu%2BQ00/kNgeeksf`,
 	};
 	const queryStr = magicJS.objToQueryStr(reqData);
 	const url = `https://${gExpertsRecommendHost}/pks/getLotteryPksInfo.do?${queryStr}`;
@@ -1125,7 +1259,7 @@ function updateRequestHeaders() {
 }
 
 
-async function tryDragonBet(drawIssue, planStr, betAmount, maxBetAmount = 96) {
+async function tryDragonBet(drawIssue, ranking, planStr, betAmount, maxBetAmount = 96) {
 	let numArr = planStr.split(',');
 	let numCount = numArr.length;
 	if (numCount >= 5) {
@@ -1140,13 +1274,13 @@ async function tryDragonBet(drawIssue, planStr, betAmount, maxBetAmount = 96) {
 	} else if (betAmount > maxBetAmount) {
 		betAmount = maxBetAmount;
 	}
-	let result = await doDragonBet(drawIssue, planStr, betAmount);
+	let result = await doDragonBet(drawIssue, ranking, planStr, betAmount);
 	if (!result) {
 		let loginRet = await tryReLogin();
 		if (!loginRet) {
 			return;
 		}
-		result = await doDragonBet(drawIssue, planStr, betAmount);
+		result = await doDragonBet(drawIssue, ranking, planStr, betAmount);
 	}
 	if (result && result.statusCode == 200) {
 		if (checkBetResult(result)) {
@@ -1175,7 +1309,20 @@ function checkBetResult(data) {
 	return false;
 }
 
-async function doDragonBet(drawIssue, planStr, betAmount) {
+async function doDragonBet(drawIssue, ranking, planStr, betAmount) {
+	let rowTextArr = [
+		'',
+		'冠军',
+		'亚军',
+		'第三名',
+		'第四名',
+		'第五名',
+		'第六名',
+		'第七名',
+		'第八名',
+		'第九名',
+		'第十名',
+	];
 	let lotteryType = 'SGFT';
 	let numArr = planStr.split(',');
 	let bets = [];
@@ -1186,12 +1333,12 @@ async function doDragonBet(drawIssue, planStr, betAmount) {
 			contentText: numStr,
 			contents: numStr,
 			drawNumber: String(drawIssue),
-			game: "B1",
+			game: `B${ranking}`,
 			groupText: "1 ~ 10名",
 			ignore: "false",
 			lottery: lotteryType,
 			odds: 9.91,
-			rowText: "冠军"
+			rowText: rowTextArr[ranking],
 		};
 		bets.push(element);
 	}