1
0
mirror of https://github.com/Oreomeow/VIP.git synced 2026-02-04 02:53:26 +08:00
Files
vip/Scripts/sh/Helpcode2.8/jdCookie.js
2022-03-09 20:43:36 +08:00

180 lines
8.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
================================================================================
魔改自 https://github.com/shufflewzc/faker2/blob/main/jdCookie.js
修改内容与task_before.sh配合由task_before.sh设置要设置要做互助的活动的 ShareCodeConfigName 和 ShareCodeEnvName 环境变量,
然后在这里实际解析/ql/log/.ShareCode中该活动对应的配置信息由code.sh生成和维护注入到nodejs的环境变量中
修改原因原先的task_before.sh直接将互助信息注入到shell的env中在ck超过45以上时互助码环境变量过大会导致调用一些系统命令
如date/cat时报 Argument list too long而在node中修改环境变量不会受这个限制也不会影响外部shell环境确保脚本可以正常运行
魔改作者:风之凌殇
================================================================================
此文件为Node.js专用。其他用户请忽略
*/
//此处填写京东账号cookie。
let CookieJDs = [];
// 判断环境变量里面是否有京东ck
if (process.env.JD_COOKIE) {
if (process.env.JD_COOKIE.indexOf('&') > -1) {
CookieJDs = process.env.JD_COOKIE.split('&');
} else if (process.env.JD_COOKIE.indexOf('\n') > -1) {
CookieJDs = process.env.JD_COOKIE.split('\n');
} else {
CookieJDs = [process.env.JD_COOKIE];
}
}
if (JSON.stringify(process.env).indexOf('GITHUB') > -1) {
console.log(`请勿使用github action运行此脚本,无论你是从你自己的私库还是其他哪里拉取的源代码,都会导致我被封号\n`);
!(async () => {
await require('./sendNotify').sendNotify('提醒', `请勿使用github action、滥用github资源会封我仓库以及账号`);
await process.exit(0);
})();
}
CookieJDs = [...new Set(CookieJDs.filter((item) => !!item))];
console.log(`\n====================共${CookieJDs.length}个京东账号Cookie=========\n`);
console.log(
`==================脚本执行- 北京时间(UTC+8)${new Date(new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000)
.toLocaleString('zh', { hour12: false })
.replace(' 24:', ' 00:')}=====================\n`
);
if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {};
for (let i = 0; i < CookieJDs.length; i++) {
if (!CookieJDs[i].match(/pt_pin=(.+?);/) || !CookieJDs[i].match(/pt_key=(.+?);/))
console.log(`\n提示:京东cookie 【${CookieJDs[i]}】填写不规范,可能会影响部分脚本正常使用。正确格式为: pt_key=xxx;pt_pin=xxx;(分号;不可少)\n`);
const index = i + 1 === 1 ? '' : i + 1;
exports['CookieJD' + index] = CookieJDs[i].trim();
}
// 以下为注入互助码环境变量仅nodejs内起效的代码
function SetShareCodesEnv(nameChinese = '', nameConfig = '', envName = '') {
let rawCodeConfig = {};
// 读取互助码
let shareCodeLogPath = `${process.env.QL_DIR}/log/.ShareCode/${nameConfig}.log`;
let fs = require('fs');
if (fs.existsSync(shareCodeLogPath)) {
// 因为faker2目前没有自带ini改用已有的dotenv来解析
// // 利用ini模块读取原始互助码和互助组信息
// let ini = require('ini')
// rawCodeConfig = ini.parse(fs.readFileSync(shareCodeLogPath, 'utf-8'))
// 使用env模块
require('dotenv').config({ path: shareCodeLogPath });
rawCodeConfig = process.env;
}
// 解析每个用户的互助码
let codes = {};
Object.keys(rawCodeConfig).forEach(function (key) {
if (key.startsWith(`My${nameConfig}`)) {
codes[key] = rawCodeConfig[key];
}
});
// 解析每个用户要帮助的互助码组,将用户实际的互助码填充进去
let helpOtherCodes = {};
Object.keys(rawCodeConfig).forEach(function (key) {
if (key.startsWith(`ForOther${nameConfig}`)) {
let helpCode = rawCodeConfig[key];
for (const [codeEnv, codeVal] of Object.entries(codes)) {
helpCode = helpCode.replace('${' + codeEnv + '}', codeVal);
}
helpOtherCodes[key] = helpCode;
}
});
// 按顺序用&拼凑到一起,并放入环境变量,供目标脚本使用
let shareCodes = [];
let leftIndex = 1,
rightIndex = Object.keys(helpOtherCodes).length;
// 判断是否是ptask并行触发若是则修改实际需要设置的互助码范围
let ptaskLeft = process.env.PTASK_LEFT;
let ptaskRight = process.env.PTASK_RIGHT;
if (ptaskLeft && ptaskRight) {
leftIndex = Number(ptaskLeft);
rightIndex = Number(ptaskRight);
}
for (let idx = leftIndex; idx <= rightIndex; idx++) {
shareCodes.push(helpOtherCodes[`ForOther${nameConfig}${idx}`]);
}
let shareCodesStr = shareCodes.join('&');
process.env[envName] = shareCodesStr;
let totalCodeCount = rightIndex - leftIndex + 1;
console.info(`【风之凌殇】 友情提示:设置 ${nameChinese} 的 互助码环境变量 ${envName},共计 ${totalCodeCount} 组互助码,总大小为 ${shareCodesStr.length}`);
}
// 判断当前活动脚本是否在互助脚本列表中
function IsShareJsFile() {
// 尝试获取在task_before.sh中设置的 互助活动的脚本文件名的关键部分 列表
let rawJsNameList = process.env.ShareCodeJSNameList;
if (!rawJsNameList) {
return false;
}
// 转换为list
let jsNameList = process.env.ShareCodeJSNameList.split(' ');
// 判断当前
let currentActivityScriptFileName = GetCurrentActivityScriptFileName();
let isShareJsFile = false;
for (let idx = 0; idx < jsNameList.length; idx++) {
if (currentActivityScriptFileName.includes(jsNameList[idx])) {
isShareJsFile = true;
break;
}
}
return isShareJsFile;
}
// 获取当前活动脚本的文件名
function GetCurrentActivityScriptFileName() {
const path = require('path');
return path.basename(process.argv[1]);
}
function randomString(e) {
e = e || 32;
let t = 'abcdefhijkmnprstwxyz2345678',
a = t.length,
n = '';
for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
return n;
}
// 若在task_before.sh 中设置了要设置互助码环境变量的活动名称和环境变量名称信息则在nodejs中处理供活动使用
let nameChinese = process.env.ShareCodeConfigChineseName;
let nameConfig = process.env.ShareCodeConfigName;
let envName = process.env.ShareCodeEnvName;
if (nameChinese && nameConfig && envName) {
SetShareCodesEnv(nameChinese, nameConfig, envName);
} else if (IsShareJsFile()) {
console.debug(
`【风之凌殇】 友情提示:当前脚本为 ${GetCurrentActivityScriptFileName()},包含在互助脚本列表中,但未设置 ShareCodeConfigName 或 ShareCodeEnvName 环境变量将不会尝试在nodejs中生成互助码的环境变量。ps: 两个值目前分别为 ${nameConfig} ${envName}`
);
console.debug(`看不惯上面的署名,就自己把这行注释掉<_< 或者不用`);
}
// 增加打印队伍信息
// export JD_COOKIE_TEAM_INDEX=$j
// export JD_COOKIE_TEAM_START_INDEX=$start_index
// export JD_COOKIE_TEAM_END_INDEX=$end_index
let teamIndex = process.env.JD_COOKIE_TEAM_INDEX;
let teamStartIndex = process.env.JD_COOKIE_TEAM_START_INDEX;
let teamEndIndex = process.env.JD_COOKIE_TEAM_END_INDEX;
if (teamIndex && teamStartIndex && teamEndIndex) {
console.info(`当前是组队模式,队伍序号为 ${teamIndex}cookie范围为 [${teamStartIndex}, ${teamEndIndex}]`);
}
// 打印ptask并行调用的一些信息
if (process.env.PTASK) {
console.info(
`检查到ptask并行执行(Powered By 风之凌殇),并发数为 ${process.env.PTASK_FINAL_THREADS},每个脚本处理 ${process.env.PTASK_BATCH} 个账号,全局账号数总计 ${process.env.PTASK_TOTAL}`
);
console.info(`当前脚本实例 ${randomString(4)} 处理账号范围 [${process.env.PTASK_LEFT}, ${process.env.PTASK_RIGHT}]`);
}