This commit is contained in:
leafTheFish
2023-03-04 16:41:36 +08:00
6 changed files with 37 additions and 627 deletions

View File

@@ -3,5 +3,40 @@
本仓库脚本仅用于交流学习请下载后24之内自行删除 本仓库脚本仅用于交流学习请下载后24之内自行删除
# 京东挂机 # 京东挂机
自助登录挂机: 京东车, 支持APP扫二维码登录和手机打开授权登录:
https://ark.leaf-x-dg.tk/login
https://qrabbit.leaf-x-dg.tk
备用提交ck登录车:
https://radish.leaf-x-dg.tk
备用短信登录车:
https://ark.leaf-x-dg.tk
京东车登录后可以在网页个人中心查询资产
## 车上自动跑的
(需要助力的活动,车头优先助力):
赚京豆
极速版金币
过期豆续期
京东超市抽奖和游戏
农场抽奖
消消乐任务
赚钱大赢家任务
团圆红包任务
各种签到
其他的私有活动本等

File diff suppressed because one or more lines are too long

View File

@@ -1,310 +0,0 @@
/*
广汽传祺小程序抽奖
cron: 45 12 29-31 12 *
一次性抽奖, 跑一次就好
抽奖之后需要自己到app-我的-兑奖中心-年末好礼大放送 里面填兑换码
一个号只能填一次兑换码,自己选分数多的去填吧
*/
const $ = new Env('广汽传祺小程序抽奖');
const got = require('got');
const envPrefix = 'gqcqWx'
const envSplitor = ['\n','&','@'] //支持多种分割,但要保证变量里不存在这个字符
const ckNames = [envPrefix+'Cookie'] //支持多变量
const MAX_THREAD = parseInt(process.env[envPrefix+'Thread']) || 3
const DEFAULT_TIMEOUT=8000, DEFAULT_RETRY=3;
const default_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.31(0x18001f30) NetType/WIFI Language/zh_CN miniProgram/wx86a1eb5a53a6973b'
const Origin = 'https://mall.gacmotor.com'
const Referer = 'https://mall.gacmotor.com/act/turntable?id=147&_sasdk=fMTUzNjA1OTE2Mjc5MzM5NDE3Ng'
const channel = 'wx_channel'
const activityId_list = ['147','148','150','152']
const client = got.extend({
headers:{
Connection:'keep-alive',
'User-Agent': default_UA,
Origin,
Referer,
},
retry: {limit:0},
timeout: DEFAULT_TIMEOUT,
followRedirect: false,
})
class BasicClass {
constructor() {
this.index = $.userIdx++;
this.name = '';
}
log(msg, opt = {}) {
var m = '', n = $.userCount.toString().length;;
if (this.index) m += `账号[${$.padStr(this.index,n)}]`;
if (this.name) m += `[${this.name}]`;
$.log(m + msg, opt);
}
async request(opt) {
var resp = null, count = 0;
var fn = opt.fn || opt.url;
opt.method = opt?.method?.toUpperCase() || 'GET';
while (count++ < DEFAULT_RETRY) {
try {
await client(opt).then(t => {
resp = t
}, e => {
resp = e.response
});
if (((resp?.statusCode / 100) | 0) <= 4) break;
} catch (e) {
if (e.name == 'TimeoutError') {
this.log(`[${fn}]请求超时,重试第${count}`);
} else {
this.log(`[${fn}]请求错误(${e.message}),重试第${count}`);
}
};
}
if (resp == null) return Promise.resolve({statusCode:-1,headers:null,result:null});
let {statusCode,headers,body} = resp;
if (body) try {body = JSON.parse(body);} catch {};
return Promise.resolve({statusCode,headers,result:body})
}
}
let http = new BasicClass();
class UserClass extends BasicClass {
constructor(ck) {
super()
this.token = ck
this.headers = {
token: this.token,
}
}
async lottery(activityId) {
try {
let options = {
fn: 'lottery',
method: 'post',
url: 'https://mall.gacmotor.com/activity-app/customer/activityPrize/lotter',
searchParam: {notip:true},
headers: this.headers,
json: {activityId,channel},
}
let {result} = await this.request(options)
let code = result?.code
if(code == '0000') {
this.log(`抽奖[${activityId}]: ${result?.data?.name}`, {notify:true})
} else {
this.log(`抽奖[${activityId}]失败[${code}]: ${result?.msg}`, {notify:true})
}
} catch (e) {
$.log(e)
} finally {
return Promise.resolve()
}
}
async prizeRecords(activityId) {
try {
let options = {
fn: 'prizeRecords',
method: 'get',
url: 'https://mall.gacmotor.com/activity-app/customer/activityPrize/query/prizeRecords',
searchParam: {activityId},
headers: this.headers,
}
let {result} = await this.request(options)
let code = result?.code
if(code == '0000') {
for(let item of (result?.data||[])) {
$.log(`[${item.prizeName}] -- ${item.code}`, {notify:true})
}
} else {
this.log(`查询中奖记录失败`)
}
} catch (e) {
$.log(e)
} finally {
return Promise.resolve()
}
}
async userTask() {
for(let id of activityId_list) {
await this.lottery(id)
}
}
async userCheckTask() {
//for(let id of activityId_list) {
// await this.prizeRecords(id)
//}
await this.prizeRecords('147')
}
}
!(async () => {
$.read_env(UserClass);
$.log('\n------------- 抽奖 -------------')
await $.threadTask('userTask',MAX_THREAD)
$.log('\n------------- 中奖记录 -------------')
await $.threadTask('userCheckTask',MAX_THREAD)
})()
.catch((e) => $.log(e))
.finally(() => $.exitNow())
function Env(name) {
return new class {
constructor(name) {
this.name = name;
this.startTime = Date.now();
this.log(`[${this.name}]开始运行\n`, {time: true});
this.notifyStr = [];
this.notifyFlag = true;
this.userIdx = 0;
this.userList = [];
this.userCount = 0;
}
log(msg, options = {}) {
let opt = {console: true};
Object.assign(opt, options);
if (opt.time) {
let fmt = opt.fmt || 'hh:mm:ss';
msg = `[${this.time(fmt)}]` + msg;
}
if (opt.notify) this.notifyStr.push(msg);
if (opt.console) console.log(msg);
}
read_env(Class) {
let envStrList = ckNames.map(x => process.env[x]);
for (let env_str of envStrList.filter(x => !!x)) {
let sp = envSplitor.filter(x => env_str.includes(x));
let splitor = sp.length > 0 ? sp[0] : envSplitor[0];
for (let ck of env_str.split(splitor).filter(x => !!x)) {
this.userList.push(new Class(ck));
}
}
this.userCount = this.userList.length;
if (!this.userCount) {
this.log(`未找到变量,请检查变量${ckNames.map(x => '['+x+']').join('或')}`, {notify: true});
return false;
}
this.log(`共找到${this.userCount}个账号`);
return true;
}
async threads(taskName, conf, opt = {}) {
while (conf.idx < $.userList.length) {
let user = $.userList[conf.idx++];
await user[taskName](opt);
}
}
async threadTask(taskName, thread) {
let taskAll = [];
let taskConf = {idx:0};
while(thread--) taskAll.push(this.threads(taskName, taskConf));
await Promise.all(taskAll);
}
time(t, x = null) {
let xt = x ? new Date(x) : new Date;
let e = {
"M+": xt.getMonth() + 1,
"d+": xt.getDate(),
"h+": xt.getHours(),
"m+": xt.getMinutes(),
"s+": xt.getSeconds(),
"q+": Math.floor((xt.getMonth() + 3) / 3),
S: this.padStr(xt.getMilliseconds(), 3)
};
/(y+)/.test(t) && (t = t.replace(RegExp.$1, (xt.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;
}
async showmsg() {
if(!this.notifyFlag) return;
if(!this.notifyStr.length) return;
var notify = require('./sendNotify');
this.log('\n============== 推送 ==============');
await notify.sendNotify(this.name, this.notifyStr.join('\n'));
}
padStr(num, length, opt = {}) {
let padding = opt.padding || '0';
let mode = opt.mode || 'l';
let numStr = String(num);
let numPad = (length > numStr.length) ? (length - numStr.length) : 0;
let pads = '';
for (let i=0; i < numPad; i++) {
pads += padding;
}
if (mode == 'r') {
numStr = numStr + pads;
} else {
numStr = pads + numStr;
}
return numStr;
}
json2str(obj, c, encode = false) {
let ret = [];
for (let keys of Object.keys(obj).sort()) {
let v = obj[keys];
if(v && encode) v = encodeURIComponent(v);
ret.push(keys + '=' + v);
}
return ret.join(c);
}
str2json(str, decode = false) {
let ret = {};
for (let item of str.split('&')) {
if(!item) continue;
let idx = item.indexOf('=');
if(idx == -1) continue;
let k = item.substr(0, idx);
let v = item.substr(idx + 1);
if(decode) v = decodeURIComponent(v);
ret[k] = v;
}
return ret;
}
randomPattern(pattern, charset = 'abcdef0123456789') {
let str = '';
for (let chars of pattern) {
if (chars == 'x') {
str += charset.charAt(Math.floor(Math.random() * charset.length));
} else if (chars == 'X') {
str += charset.charAt(Math.floor(Math.random() * charset.length)).toUpperCase();
} else {
str += chars;
}
}
return str;
}
randomString(len, charset = 'abcdef0123456789') {
let str = '';
for (let i = 0; i < len; i++) {
str += charset.charAt(Math.floor(Math.random() * charset.length));
}
return str;
}
randomList(a) {
let idx = Math.floor(Math.random() * a.length);
return a[idx];
}
wait(t) {
return new Promise(e => setTimeout(e, t));
}
async exitNow() {
await this.showmsg();
let e = Date.now();
let s = (e - this.startTime) / 1000;
this.log('');
this.log(`[${this.name}]运行结束,共运行了${s}`, {time: true});
process.exit(0);
}
}
(name)
}

File diff suppressed because one or more lines are too long

22
kaka.js

File diff suppressed because one or more lines are too long

29
ks.js

File diff suppressed because one or more lines are too long