forked from magicgsw/ningmeng
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgd.js
206 lines (173 loc) · 12.7 KB
/
gd.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
/*
微信公众号柠檬玩机交流
活动地址:
http://nm66.top/gd.png
Tg群 t.me/ningmengwj
使用方法
打开活动地址 微信扫一扫进入
即可获取数据 点击立即报名 然后绑定手机号 才可以用脚本
无视活动指定厦门地区都可参加
自动抽奖 自动报名步数 或得秒到账红包
未越狱刷步数方法
商店下载小米运动
使用手机号码注册登录
注意 千万不能用微信登录
打开小米运动设置
第三方接入选择微信
打开微信扫码绑定即可
然后打开柠檬小米运动刷步数
http://nm999.cn/ 输入你的手机号码密码和步数 刷1万即可
记得每日打开一次小程序同步一下步数再手动运行一下脚本
[rewrite_local]
https://mini-club.codoon.com/v1/home\Sclub_id=\d+ url script-request-header http://nm66.top/gd.js
hostname = *.codoon.com
[task_local]
0 30 7,10 * * * http://nm66.top/gd.js, tag=柠檬咕咚步数红包, img-url=http://nm66.top/1.jpg, enabled=true
*/
const $ = new Env('柠檬咕咚步数红包');
let status;
status = (status = ($.getval("gdstatus") || "1") ) > 1 ? `${status}` : ""; // 账号扩展字符
const gdhdArr = [],gdcount = ''
const gdurlArr = []
let gdhd = $.getdata('gdhd')
let gdurl = $.getdata('gdurl')
!(async () => {
if (typeof $request !== "undefined") {
await gdck()
} else {
gdhdArr.push($.getdata('gdhd'))
gdurlArr.push($.getdata('gdurl'))
let gdcount = ($.getval('gdcount') || '1');
for (let i = 2; i <= gdcount; i++) {
gdhdArr.push($.getdata(`gdhd${i}`))
gdurlArr.push($.getdata(`gdurl${i}`))
}
console.log(`------------- 共${gdhdArr.length}个账号-------------\n`)
for (let i = 0; i < gdhdArr.length; i++) {
if (gdhdArr[i]) {
gdhd = gdhdArr[i];
gdurl = gdurlArr[i];
$.index = i + 1;
console.log(`\n开始【柠檬咕咚步数红包${$.index}】`)
await bslb()
await bsbm()
await bshb()
await bshblq()
}
}}
})()
.catch((e) => $.logErr(e))
.finally(() => $.done())
function gdck() {
if ($request.url.indexOf("v1/home?club_id") > -1) {
const gdhd = JSON.stringify($request.headers)
if(gdhd) $.setdata(gdhd,`gdhd${status}`)
const gdurl = JSON.stringify($request.url)
if(gdurl) $.setdata(gdurl,`gdurl${status}`)
$.log(gdhd)
$.log(gdurl)
$.msg($.name,"",'柠檬咕咚步数红包'+`${status}` +'数据获取成功!')
}
}
//抽奖
function bshb(timeout = 0) {
return new Promise((resolve) => {
//id = gdurl.match(/id=(\d+)/)[1]
let url = {
url : 'https://mini-club.codoon.com/v1/red_packet/energy_user/open',
headers : JSON.parse(gdhd),
body : `{"city":"","latitude":24.473684,"longitude":118.122576,"club_id":32327}`,
}
$.post(url, async (err, resp, data) => {
try {
const result = JSON.parse(data)
if(result.code == "bad_request"){
console.log(`\n抽奖失败 :${result.detail}`)
} else {
console.log(`\n抽奖成功+${result.money}`)
}
} catch (e) {
//$.logErr(e, resp);
} finally {
resolve()
}
},timeout)
})
}
//步数报名列表
function bslb(timeout = 0) {
return new Promise((resolve) => {
//id = gdurl.match(/id=(\d+)/)[1]
let url = {
url : 'https://mini-club.codoon.com/v1/red_packet/step_money/list?club_id=32327',
headers : JSON.parse(gdhd),
}
$.get(url, async (err, resp, data) => {
try {
const result = JSON.parse(data)
if(result.state == 1){
//bsid = result.data[0].id
bsid = data.match(/"id":(\d+)/)[1]
console.log(`\n最新一期步数ID:`+bsid)
} else {
console.log('\n步数ID获取失败')
}
} catch (e) {
//$.logErr(e, resp);
} finally {
resolve()
}
},timeout)
})
}
//步数报名
function bsbm(timeout = 0) {
return new Promise((resolve) => {
//id = gdurl.match(/id=(\d+)/)[1]
let url = {
url : 'https://mini-club.codoon.com/v1/red_packet/step_money/join',
headers : JSON.parse(gdhd),
body : `{"city":"","latitude":24.473684,"longitude":118.122576,"club_id":32327,"id":${bsid}}`,
}
$.post(url, async (err, resp, data) => {
try {
const result = JSON.parse(data)
if(result.code == "bad_request"){
console.log(`\n步数报名失败:${result.detail}`)
} else {
console.log(`\n步数报名成功:${result.ok}`)
}
} catch (e) {
//$.logErr(e, resp);
} finally {
resolve()
}
},timeout)
})
}
//步数报名红包领取
function bshblq(timeout = 0) {
return new Promise((resolve) => {
//id = gdurl.match(/id=(\d+)/)[1]
let url = {
url : 'https://mini-club.codoon.com/v1/red_packet/step_money/open',
headers : JSON.parse(gdhd),
body : `{"city":"","club_id":32327,"id":${bsid},"latitude":24.473684,"longitude":118.122576}`,
}
$.post(url, async (err, resp, data) => {
try {
const result = JSON.parse(data)
if(result.code == "bad_request"){
console.log(`\n步数红包领取失败:${result.detail}`)
} else {
console.log(`\n步数红包领取成功:${result.money}`)
}
} catch (e) {
//$.logErr(e, resp);
} finally {
resolve()
}
},timeout)
})
}
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)}