-
Notifications
You must be signed in to change notification settings - Fork 411
/
task_before.sh
964 lines (914 loc) · 40.7 KB
/
task_before.sh
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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
#!/usr/bin/env bash
## Build 20220831-001-test
## 6dylan6_20240905
name_js=(
jd_farm_help
jd_farm_help_new
#jd_pet
jd_plantBean_help
#jd_dreamFactory
#jd_jdfactory
#jd_crazy_joy
#jd_jdzz
#jd_jxnc
#jd_bookshop
#jd_cash
#jd_sgmh
#jd_cfd
jd_health
jd_farmshare
#jd_carnivalcity
#jd_city
#jd_moneyTree
#jd_cfdtx
)
name_config=(
Fruit
Fruit_new
#Pet
Bean
#DreamFactory
#JdFactory
#Joy
#Jdzz
#Jxnc
#BookShop
#Cash
#Sgmh
#Cfd
Health
Fruit_new
#Carni
#City
#MoneyTree
#TokenJxnc
)
name_chinese=(
东东农场
新农场助力
#东东萌宠
种豆得豆助力
#京喜工厂
#东东工厂
#crazyJoy任务
#京东赚赚
#京喜农场
#口袋书店
#签到领现金
#闪购盲盒
#京喜财富岛
东东健康社区
农场小程序助力
#京东手机狂欢城
#城城领现金
#摇钱树
#京喜token
)
env_name=(
FRUITSHARECODES ## 1、东东农场互助码
NEWFRUITSHARECODES ## 1、新东东农场互助码
#PETSHARECODES ## 2、东东萌宠互助码
PLANT_BEAN_SHARECODES ## 3、种豆得豆互助码
#DREAM_FACTORY_SHARE_CODES ## 4、京喜工厂互助码
#DDFACTORY_SHARECODES ## 5、东东工厂互助码
#JDJOY_SHARECODES ## 6、疯狂的JOY互助码
#JDZZ_SHARECODES ## 7、京东赚赚互助码
#JXNC_SHARECODES ## 8、京喜农场助力码
#BOOKSHOP_SHARECODES ## 9、口袋书店互助码
#JD_CASH_SHARECODES ## 10、签到领现金互助码
#JDSGMH_SHARECODES ## 11、闪购盲盒互助码
#JDCFD_SHARECODES ## 12、京喜财富岛互助码
JDHEALTH_SHARECODES ## 13、东东健康社区互助码
NEWFRUITSHARECODES ## 14、新农场小程序
#JD818_SHARECODES ## 14、京东手机狂欢城互助码
#CITY_SHARECODES ## 15、城城领现金互助码
#MONEYTREE_SHARECODES ## 16、摇钱树
#JXNCTOKENS ## 17、京喜Token(京喜财富岛提现用)
)
var_name=(
ForOtherFruit ## 1、东东农场互助规则
ForOtherFruit_new ## 1、东东农场互助规则
#ForOtherPet ## 2、东东萌宠互助规则
ForOtherBean ## 3、种豆得豆互助规则
#ForOtherDreamFactory ## 4、京喜工厂互助规则
#ForOtherJdFactory ## 5、东东工厂互助规则
#ForOtherJoy ## 6、疯狂的JOY互助规则
#ForOtherJdzz ## 7、京东赚赚互助规则
#ForOtherJxnc ## 8、京喜农场助力码
#ForOtherBookShop ## 9、口袋书店互助规则
#ForOtherCash ## 10、签到领现金互助规则
#ForOtherSgmh ## 11、闪购盲盒互助规则
#ForOtherCfd ## 12、京喜财富岛互助规则
ForOtherHealth ## 13、东东健康社区互助规则
ForOtherFruit_new ## 新农场小程序
#ForOtherCarni ## 14、京东手机狂欢城互助规则
#ForOtherCity ## 15、城城领现金互助规则
#ForOtherMoneyTree ## 16、摇钱树
#TokenJxnc ## 17、京喜Token(京喜财富岛提现用)
)
local_scr=$1
relative_path="${local_scr%/*}"
repo_dir=""
sub_dir_scripts="$(ls -l $dir_scripts |awk '/^d/ {print $NF}')"
if [[ ! -z ${relative_path} ]] && [[ ${local_scr} =~ "/" ]]; then
local_scr_name="$(echo ${local_scr##*/})"
if [[ ${relative_path} =~ "$dir_scripts" ]]; then
repo_dir="$(echo ${relative_path#$dir_scripts} | awk -F '/' '{print $(NF)}')"
local_scr_dir="${relative_path}"
elif [[ ${relative_path} =~ "/ql/" ]]; then
local_scr_dir="$dir_scripts"
else
repo_dir="$(echo $local_scr | awk -F '/' '{print $(NF-1)}')"
local_scr_dir="$dir_scripts/${repo_dir}"
fi
else
local_scr_name=$local_scr
local_scr_dir="$dir_scripts"
fi
## 选择python3还是node
define_program() {
local first_param=$1
if [[ $first_param == *.js ]]; then
which_program="node"
elif [[ $first_param == *.py ]]; then
which_program="python3"
elif [[ $first_param == *.sh ]]; then
which_program="bash"
elif [[ $first_param == *.ts ]]; then
which_program="ts-node-transpile-only"
else
which_program=""
fi
}
# 定义 json 数据查询工具
def_envs_tool(){
local i
for i in $@; do
local token=$(cat $file_auth_user | jq -r .token)
if [[ ! -z ${token} ]]; then
curl -s --noproxy "*" "http://0.0.0.0:5600/api/envs?searchValue=$i" -H "Authorization: Bearer $token" | jq .data
fi
done
}
def_json_total(){
def_envs_tool $1 | jq .[].$2 | tr -d '[]," '
}
def_json_grep_match(){
def_envs_tool $1 | jq .[] | perl -pe '{s|([^}])\n|\1|g}' | grep "$3" | jq .$2 | tr -d '[]," '
}
def_json(){
def_envs_tool $1 | jq .[$2].$3 | perl -pe '{s|^"\|"$||g}' | grep -v "null"
}
def_json_match(){
if [[ -f $1 ]]; then
if [[ $3 && $(cat "$1" | grep "$3") ]]; then
cat "$1" | perl -pe '{s|^\[\|\]$||g; s|\n||g; s|\},$|\}\n|g}' | grep "$2" | jq -r .$3 | grep -v "null"
else
cat "$1" | perl -pe '{s|^\[\|\]$||g; s|\n||g; s|\},$|\}\n|g}' | grep "$2" | grep -v "null"
fi
fi
}
def_json_value(){
if [[ -f $1 ]]; then
if [[ $(cat "$1" | grep "$2") ]]; then
cat "$1" | perl -pe "{s|^\[\|\]$||g; s|\n||g; s|\},$|\}\n|g}" | grep "$3" | jq -r .$2 | grep -v "null"
fi
fi
}
def_sub(){
local i j
for i in $(def_json_total $1 $2 | awk '/'$3'/{print NR}'); do
j=$((i - 1));
echo $j
done
}
def_sub_value(){
local line=$(($3 + 1))
def_json_total $1 $2 | awk 'NR=='$line''
}
def_urldecode(){
local i
for i in $@; do
echo $i | awk 'BEGIN{for(i=0;i<10;i++)hex[i]=i;hex["A"]=hex["a"]=10;hex["B"]=hex["b"]=11;hex["C"]=hex["c"]=12;hex["D"]=hex["d"]=13;hex["E"]=hex["e"]=14;hex["F"]=hex["f"]=15;}{gsub(/\+/," ");i=$0;while(match(i,/%../)){;if(RSTART>1);printf"%s",substr(i,1,RSTART-1);printf"%c",hex[substr(i,RSTART+1,1)]*16+hex[substr(i,RSTART+2,1)];i=substr(i,RSTART+RLENGTH);}print i;}'
done
}
def_pin_sub(){
if [[ $@ ]]; then
local i j k
for i in $@; do
for j in $(def_urldecode $(def_json_total JD_COOKIE value | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|}") | awk '/'$i'/{print NR}'); do
k=$((j - 1));
echo $k
done
done
fi
}
# 字符串 def_urldecode 解密
def_urldecode(){
for i in $@; do
echo $i | awk 'BEGIN{for(i=0;i<10;i++)hex[i]=i;hex["A"]=hex["a"]=10;hex["B"]=hex["b"]=11;hex["C"]=hex["c"]=12;hex["D"]=hex["d"]=13;hex["E"]=hex["e"]=14;hex["F"]=hex["f"]=15;}{gsub(/\+/," ");i=$0;while(match(i,/%../)){;if(RSTART>1);printf"%s",substr(i,1,RSTART-1);printf"%c",hex[substr(i,RSTART+1,1)]*16+hex[substr(i,RSTART+2,1)];i=substr(i,RSTART+RLENGTH);}print i;}'
done
}
# 字符串 urldecode 解密
urldecode() {
local url_encoded="${1//+/ }"
printf '%b' "${url_encoded//%/\\x}"
}
## 生成pt_pin清单
gen_pt_pin_array() {
## 生成 json 值清单
gen_basic_value(){
for i in $@; do
eval $i='($(def_json_total JD_COOKIE $i | perl -pe "{s| ||g}"))'
done
}
gen_basic_value value status
# 生成JD_COOKIE下标数组
ori_sub=(${!value[@]})
# 生成序号数组
sn=($(def_json_total JD_COOKIE value | awk '{print NR}'))
# 生成pin值数组
pin=($(def_json_total JD_COOKIE value | perl -pe "{s|.*pt_pin=([^; ]+)(?=;?).*|\1|}"))
# 生成非转码pin值数组
pt_pin=($(urldecode "${pin[*]}"))
#面板 JD_COOKIE 数组
ori_array=(${value[@]})
#面板 JD_COOKIE 总数
ori_user_sum=${#ori_array[@]}
#剔除已禁用 JD_COOKIE 数组元素
for j in $(def_sub JD_COOKIE status 1); do unset ori_array[j]; done
#本次导出的 JD_COOKIE 数组
array=(${ori_array[@]})
#本次导出的 JD_COOKIE 总数
user_sum=${#array[@]}
}
## 获取用户昵称 API
Get_NickName() {
local currentTimeStamp=$(date +%s)
local cookie=$1
local url_1="https://me-api.jd.com/user_new/info/GetJDUserInfoUnion"
local url_2="https://wxapp.m.jd.com/kwxhome/myJd/home.json?&useGuideModule=0&bizId=&brandId=&fromType=wxapp×tamp=$currentTimeStamp"
local UA_1="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62"
local UA_2="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.10(0x18000a2a) NetType/WIFI Language/zh_CN"
local api_1=$(
curl -s --connect-timeout 20 --retry 3 --noproxy "*" "$url_1" \
-H "Host: me-api.jd.com" \
-H "Accept: */*" \
-H "Connection: keep-alive" \
-H "Cookie: $cookie" \
-H "User-Agent: $UA_1" \
-H "Accept-Language: zh-cn" \
-H "Referer: https://home.m.jd.com/myJd/newhome.action?sceneval=2&ufc=&" \
-H "Accept-Encoding: deflate, br"
)
local api_2=$(
curl -s --connect-timeout 20 --retry 3 --noproxy "*" "$url_2" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Host: wxapp.m.jd.com" \
-H "Connection: keep-alive" \
-H "Cookie: $cookie" \
-H "User-Agent: $UA_2" \
-H "Referer: https://servicewechat.com/wxa5bf5ee667d91626/161/page-frame.html" \
-H "Accept-Encoding: compress,deflate, br"
)
retcode=$(echo $api_1 | jq -r .retcode)
if [[ $retcode == 0 ]]; then
nickname=$(echo $api_1 | jq -r .data | jq -r .userInfo | jq -r .baseInfo | jq -r .nickname)
echo -e "$nickname"
else
code=$(echo $api_2 | jq -r .code)
if [[ $code != 999 ]]; then
nickname=$(echo $api_2 | jq -r .user | jq -r .petName)
echo -e "$nickname"
fi
fi
}
## 生成用户信息清单
gen_uesr_info(){
remarks[$1]="$(def_json JD_COOKIE remarks "pin=${pin[$1]};" | head -1)"
if [[ ${remarks[$1]} == *@@* ]]; then
remarks_name[$1]="($(echo ${remarks[$1]} | awk -F '@@' '{print $1}'))"
elif [[ ${remarks[$1]} && ${remarks[$1]} != null ]]; then
remarks_name[$1]="(${remarks[$1]})"
else
remarks_name[$1]="(未备注)"
fi
tmp_NickName_1=$(Get_NickName "${value[$1]}")
[[ -f $CK_WxPusherUid_dir/$CK_WxPusherUid_file ]] && tmp_NickName_2="$(def_json_value "$CK_WxPusherUid_dir/$CK_WxPusherUid_file" NickName "pin=${pin[$1]};")"
if [[ $tmp_NickName_1 ]]; then
NickName[$1]="$tmp_NickName_1"
elif [[ $tmp_NickName_2 ]]; then
NickName[$1]="$tmp_NickName_2"
else
NickName[$1]=""
fi
[[ ! ${NickName[$1]} || ${NickName[$1]} = null ]] && UserName[$1]=${pin[$1]} || UserName[$1]=${NickName[$1]}
ori_full_name[$1]="【${sn[$1]}】${UserName[$1]}${remarks_name[$1]}"
full_name[$1]="${ori_full_name[$1]}"
[[ $status[$1] = 1 ]] && unset ori_array[$1]
}
redefine_JD_COOKIE(){
array=(${ori_array[@]})
user_sum=${#array[@]}
jd_Cookie="$(echo ${array[@]} | sed 's# #\&#g')"
[[ $jd_Cookie ]] && export JD_COOKIE="$jd_Cookie"
}
## 临时禁止账号运行活动脚本
TempBlock_CK(){
## 按 Cookie 序号禁止账号
TempBlock_JD_COOKIE(){
## 导入基础 JD_COOKIE 变量
local TempBlockCookie TempBlockPin TempDesiPin i j m n p q
if [[ $3 ]]; then
TempDesiPin="$(def_urldecode $3 | perl -pe "{s|,| |g;}")"
i=0
for j in $(def_pin_sub $TempDesiPin); do
[[ ${status[j]} = 1 ]] && continue
TempDesiCKArray[i]=${ori_array[j]}
let i++
done
[[ ${TempDesiCKArray[@]} ]] && ori_array=(${TempDesiCKArray[@]})
else
[[ $(echo $1 | perl -pe "{s|\D||g;}") ]] && TempBlockCookie="$(eval echo $(echo $1 | perl -pe "{s|~\|-|_|g; s|\W+\|[A-Za-z]+| |g; s|(\d+)_(\d+)|{\1..\2}|g;}"))" || TempBlockCookie=""
TempBlockPin="$(def_urldecode $2 | perl -pe "{s|,| |g;}")"
for m in $TempBlockCookie; do
n=$((m - 1))
unset ori_array[n]
done
for k in $(def_pin_sub $TempBlockPin); do
unset ori_array[k]
done
fi
redefine_JD_COOKIE
}
local i j k
local initial_user_sum=$user_sum
if [[ -n "$(echo $tempblock_ck_envs_num|sed -n "/^[0-9]\+$/p")" ]]; then
for ((i = 1; i <= $tempblock_ck_envs_num; i++)); do
if [ tempblock_ck_envs$i ]; then
local tempblock_ck_array=($(eval echo "\$tempblock_ck_envs$i" | perl -pe "{s|&| |g}"))
for j in "${tempblock_ck_array[@]}"; do
local tmp_task_array=($(echo $j | perl -pe "{s|@| |g}"))
local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}"))
for k in ${tmp_script_array[@]}; do
if [[ $local_scr == *$k* ]]; then
TempBlockCookie="${tmp_task_array[1]}"
TempBlockPin=${tmp_task_array[2]}
TempDesiPin=${tmp_task_array[3]}
break
fi
done
done
fi
done
fi
if [[ $TempBlockCookie ]] || [[ $TempBlockPin ]] || [[ $TempDesiPin ]]; then
TempBlock_JD_COOKIE $TempBlockCookie $TempBlockPin $TempDesiPin
fi
#echo -n "# 当前总共 $ori_user_sum 个 JD_COOKIE"
if [[ $ori_user_sum -gt $initial_user_sum ]] && [[ $initial_user_sum -gt $user_sum ]]; then
echo -e "已通过环境变量禁用了 $((ori_user_sum - initial_user_sum)) 个 JD_COOKIE,已临时禁止了 $((initial_user_sum - user_sum)) 个 JD_COOKIE。"
elif [[ $ori_user_sum -eq $initial_user_sum ]] && [[ $initial_user_sum -gt $user_sum ]]; then
echo -e "已临时禁止了 $((initial_user_sum - user_sum)) 个 JD_COOKIE。"
elif [[ $ori_user_sum -gt $initial_user_sum ]] && [[ $initial_user_sum -eq $user_sum ]]; then
echo -e "已通过环境变量禁用了 $((ori_user_sum - initial_user_sum)) 个 JD_COOKIE。"
fi
#echo -e ""
}
## 获取用户状态 API
Get_CK_Status() {
local cookie=$1
local url="https://me-api.jd.com/user_new/info/GetJDUserInfoUnion"
local api=$(
curl -s --connect-timeout 30 --retry 3 --noproxy "*" "$url" \
-H "Cookie: $cookie" \
-H "Referer: https://home.m.jd.com/myJd/home.action"
)
retcode=$(echo $api | jq -r .retcode)
if [[ ! $retcode || $retcode = null ]]; then
return 2
elif [[ $retcode == 0 ]]; then
return 0
else
return 1
fi
}
# 移除失效的 Cookie
remove_void_ck(){
if [[ $Remove_Void_CK = 1 ]]; then
local i j void_ck_num
local initial_user_sum=$user_sum
local test_connect="$(curl -I -s --connect-timeout 20 --retry 3 --noproxy "*" https://bean.m.jd.com/bean/signIndex.action -w %{http_code} | tail -n1)"
echo -e "# 开始检测 Cookie 的有效性,可能花费一定时间,请耐心等待 ..."
echo -e "# 本次一共导入 $user_sum 个 Cookie ,其中:"
for ((i=0; i < $ori_user_sum; i ++)); do
gen_uesr_info $i
Get_CK_Status ${value[i]}
[[ $? = 0 ]] && echo -e "# ${full_name[i]} 状态正常"
[[ $? = 1 ]] && echo -e "# ${full_name[i]} 已失效" && unset ori_array[i]
[[ $? = 2 ]] && echo -e "# ${full_name[i]} 因 API 连接失败跳过检测"
done
redefine_JD_COOKIE
void_ck_num=$((initial_user_sum - user_sum))
[[ $void_ck_num = 0 ]] && echo -e "# 未检测到失效 Cookie 。" || echo -e "# 已剔除以上 $void_ck_num 个失效的 Cookie 。"
echo -e ""
fi
}
## 重组 CK
Recombin_CK(){
local i j k m n
if [[ -n "$(echo $recombin_ck_envs_num|sed -n "/^[0-9]\+$/p")" ]]; then
for ((i = 1; i <= $recombin_ck_envs_num; i++)); do
if [ recombin_ck_envs$i ]; then
local recombin_ck_array=($(eval echo "\$recombin_ck_envs$i" | perl -pe "{s|&| |g}"))
#[[ $DEBUG_MODE = 2 ]] &&]]&& echo ${recombin_ck_array[@]}
for j in "${recombin_ck_array[@]}"; do
local tmp_task_array=($(echo $j | perl -pe "{s|@| |g}"))
local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}"))
#[[ $DEBUG_MODE = 1 ]] && echo ${tmp_script_array[@]}
for k in "${tmp_script_array[@]}"; do
if [[ $local_scr == *$k* ]]; then
[[ $DEBUG_MODE = 1 ]] && echo -n "${tmp_script_array[@]}" && echo -e "\n"
Recombin_CK_Mode="${tmp_task_array[1]}"
[[ $DEBUG_MODE = 1 ]] && eval echo "Recombin_CK_Mode$m : \$Recombin_CK_Mode$m"
for ((m = 1; m <= 5; m++)); do
n=$((m + 1))
eval Recombin_CK_ARG$m="${tmp_task_array[n]}"
[[ $DEBUG_MODE = 1 ]] && eval echo "Recombin_CK_ARG$m : \$Recombin_CK_ARG$m"
done
local temp_status=1
[[ $Recombin_CK_Mode = 4 || $Recombin_CK_Mode = 5 ]] && Recombin_CK_cal && break 4 || Recombin_CK_cal
fi
done
done
fi
done
fi
[[ ! $temp_status ]] && Recombin_CK_cal
}
## 重组 CK 计算
Recombin_CK_cal(){
## 随机模式算法
combine_random(){
local combined_all ran_sub tmp i
echo "# 正在应用 随机Cookie 模式..."
[[ -n "$(echo $1|sed -n "/^[0-9]\+$/p")" && $1 -le $user_sum ]] && ran_num=$1 || ran_num=$user_sum
echo -e "# 当前总共 $user_sum 个有效账号,本次随机抽取 $ran_num 个账号按随机顺序参加活动。"
ran_sub="$(seq $user_sum | sort -R | head -$ran_num)"
for i in $ran_sub; do
j=$((i -1))
[[ ! ${array[j]} ]] && continue
tmp="${array[j]}"
combined_all="$combined_all&$tmp"
done
jdCookie_4=$(echo $combined_all | sed 's/^&//g')
[[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4"
#[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4
}
## 优先模式算法
combine_priority(){
local combined_all ran_sub jdCookie_priority jdCookie_random m n
if [ $1 ]; then
# 固定区账号数量
[[ -n "$(echo $1|sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0"
if [[ $fixed_num -ge $user_sum ]]; then
echo "# 优先固定账号数量不得大于或等于有效账号总量,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
elif [[ $fixed_num -eq 0 ]]; then
echo "# 未设定优先固定数量,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
else
echo "# 正在应用 优先Cookie 模式..."
echo -e "# 当前总共 $user_sum 个有效账号,其中前 $fixed_num 个账号为固定顺序。\n# 本次从第 $((fixed_num + 1)) 个账号开始按随机顺序参加活动。"
ran_sub=$(seq $fixed_num $((ori_user_sum-1)) | sort -R)
for ((m = 0; m < $fixed_num; m++)); do
[[ ! ${ori_array[m]} ]] && continue
tmp="${ori_array[m]}"
jdCookie_priority="$jdCookie_priority&$tmp"
done
for n in $ran_sub; do
[[ ! ${ori_array[n]} ]] && continue
tmp="${ori_array[n]}"
jdCookie_random="$jdCookie_random&$tmp"
done
combined_all="$jdCookie_priority$jdCookie_random"
jdCookie_4=$(echo $combined_all | perl -pe "{s|^&||}")
[[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4"
#[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4
fi
else
echo "# 由于参数缺失,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
fi
}
## 轮换模式算法
combine_rotation(){
# 当月总天数
local total_days=$(cal | grep ^[0-9] | tail -1 | awk -F " " '{print $NF}')
# 今天几号
local today_day=$(date +%-d)
local combined_all rot_num rot_start_num jdCookie_priority jdCookie_rot_head jdCookie_rot_mid tmp_1 tmp_2 tmp_3 a b c
# 固定区账号数量
[[ -n "$(echo $1|sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0"
if [[ $fixed_num -ge $ori_user_sum ]]; then
echo "# 优先固定账号数量不得大于或等于有效账号总量,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
elif [[ $today_day -gt 1 ]]; then
echo "# 正在应用 轮换Cookie 模式..."
# 轮换区的账号数量
local rot_total_num=$((ori_user_sum - fixed_num))
if [[ $rot_total_num -gt 2 ]]; then
combine_bottom
# 每日轮换的账号数量
rot_num=$2
[[ -z "$(echo $rot_num|sed -n "/^[0-9]\+$/p")" || ! $rot_num || $rot_num -lt 1 || $rot_total_num -lt $rot_num ]] && rot_num=$(((rot_total_num + total_days -1)/total_days)) && [[ $rot_num -lt 1 ]] && rot_num="1"
rot_start_num=$((fixed_num + rot_num * ((today_day - 1))))
while [[ $ori_user_sum -lt $((rot_start_num + 1)) ]]; do rot_start_num=$((rot_start_num - rot_total_num)); done
echo -n "# 当前总共 $user_sum 个有效账号"
[[ $fixed_num -gt 0 ]] && echo -n ",其中前 $fixed_num 个账号为固定顺序" || echo -n ",所有账号参与轮换"
[[ $user_bottom_sum -gt 0 ]] && echo -e ",有 $user_bottom_sum 个账号固定在末尾。" || echo -e "。"
echo -e "# 今天从第 $((rot_start_num + 1)) 位账号开始轮换,轮换频次为:$rot_num 个账号/天。"
for ((a = 0; a < fixed_num; a++)); do
[[ ! ${ori_array[a]} ]] && continue
tmp_1="${ori_array[a]}"
jdCookie_priority="$jdCookie_priority&$tmp_1"
done
for ((b = $rot_start_num; b < $ori_user_sum; b++)); do
[[ ! ${ori_array[b]} ]] && continue
tmp_2="${ori_array[b]}"
jdCookie_rot_head="$jdCookie_rot_head&$tmp_2"
done
for ((c = $fixed_num; c < $((rot_start_num)); c++)); do
[[ ! ${ori_array[c]} ]] && continue
tmp_3="${ori_array[c]}"
jdCookie_rot_mid="$jdCookie_rot_mid&$tmp_3"
done
combined_all="$jdCookie_priority$jdCookie_rot_head$jdCookie_rot_mid$jdCookie_bottom"
jdCookie_4=$(echo $combined_all | perl -pe "{s|^&||; s|&$||}")
[[ $jdCookie_4 ]] && export JD_COOKIE="$jdCookie_4"
#[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4 | sed 's/&/\n/g' > /ql/config/2.txt
else
echo "# 由于参加轮换的账号数量不足 2 个,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
fi
elif [[ $today_day -eq 1 ]]; then
echo "# 今天是 1 号,不应用轮换模式,全部 Cookie 按正常顺序参加活动..."
export JD_COOKIE="$JD_COOKIE"
fi
}
## 组队模式算法
combine_team(){
team_ck(){
local tmp combined_tmp combined_all i j k m n
for ((i = 0; i < $team_num_total; i++)); do
#当前队伍是第几组
j=$((i + 1))
#发起组队的账号在Cookie数组中的序号
k=$((i/team_num))
tmp=""
combined_tmp=""
combined_all=""
if [ $i -ne $team_num ]; then
for ((m = 1; m < $teamer_num; m++)); do
#当前组队的第二账号所在Cookie数组的序号
n=$(((teamer_num -1)*i + m)) && [[ $n -ge $ori_user_sum ]] && continue
tmp="${array[n]}"
combined_tmp="$combined_tmp&$tmp"
done
combined_all="${array[k]}$combined_tmp"
elif [ $i -eq $team_num ]; then
for ((m = 1; m < $((teamer_num - 1)); m++)); do
#第二账号发起的第一支组队,该队伍中的第三账号所在Cookie数组的序号
n=$(((teamer_num -1)*i + m)) && [[ $n -ge $ori_user_sum ]] && continue
tmp="${array[n]}"
combined_tmp="$combined_tmp&$tmp"
done
combined_all="${array[k]}&${array[0]}$combined_tmp"
fi
jdCookie_4=$combined_all
if [[ $jdCookie_4 ]]; then
export JD_COOKIE="$jdCookie_4"
#[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4
echo -e "\n# 本次提交的是第 $j 组账号。"
define_program "$local_scr"
if [ $temp_status = 3 ]; then
$which_program $local_scr_dir/$local_scr_name
[[ $interval_time != "0" ]] && echo -e "# 等待 $interval_time 秒后开始进行下一组队任务 ..."
sleep $interval_time
else
$which_program $local_scr_dir/$local_scr_name
sleep $delay_time
fi
fi
done
exit
}
run_js_in_team(){
if [[ $teamer_num -ge $user_sum ]]; then
echo "# 每组队伍的成员数量不得大于或等于有效账号总数量,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
elif [[ $((teamer_num * team_num)) -ge $user_sum ]]; then
echo "# 参与组队的总成员数量不得大于或等于有效账号总数量,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
else
echo "# 正在应用 组队Cookie 模式..."
#总组队数量
team_num_total=$(((user_sum + teamer_num - 2)/(teamer_num - 1)))
#前几个账号发起组队
team_num_launch=$(((team_num_total + team_num - 1)/team_num))
[[ $team_num -ge $team_num_total ]] && team_num=$team_num_total && [[ $team_num -lt 1 ]] && team_num=1
echo -n "# 当前总共 $user_sum 个有效账号,其中前 $team_num_launch 个账号发起组队,每个账号最多可以发起 $team_num 次组队,一共组 $team_num_total 队,每支队伍最多包含 $teamer_num 个账号。"
if [[ -n "$(echo $1|perl -pe "{s|\.\|s\|m\|h\|d||g}"|sed -n "/^[0-9]\+$/p")" ]]; then
temp_status="1"
delay_time="$(echo $1|perl -pe "{s|([a-z])(\d)+|\1 \2|g;}")"
echo -e "各支队伍启动脚本的延隔时间为`format_time $1`。"
elif [[ $1 = 0 ]]; then
temp_status="2"
delay_time="0"
echo -e "所有队伍并发启动脚本,可能会占用较高的系统资源导致卡顿。"
elif [[ $1 = "-" ]] && [[ -n "$(echo $2|perl -pe "{s|\.\|s\|m\|h\|d||g}"|sed -n "/^[0-9]\+$/p")" ]] ; then
temp_status="3"
interval_time="$(echo $2|perl -pe "{s|([a-z])(\d)|\1 \2|g;}")"
echo -e "各支队伍启动脚本的间隔时间为`format_time $2`。"
else
temp_status="3"
delay_time="0"
interval_time="0"
echo -e ""
fi
team_ck
fi
}
local p q
if [[ $1 ]] && [[ $2 ]]; then
if [[ $1 = "-" ]] && [[ $2 = "-" ]] && [[ -n "$(echo $5|sed -n "/^[0-9]\+$/p")" ]]; then
if [[ $5 = 0 ]]; then
for p in ${activity_env[@]}; do
activity_array=($(echo $p | perl -pe "{s|@| |g}"))
teamer_num=${activity_array[0]}
team_num=${activity_array[1]}
export jd_zdjr_activityId=${activity_array[2]}
export jd_zdjr_activityUrl=${activity_array[3]}
echo -e "活动 ID (activityId) : $jd_zdjr_activityId"
echo -e "活动链接(activityUrl): $jd_zdjr_activityUrl"
run_js_in_team $3 $4
done
elif [[ $5 -gt 0 ]]; then
q=$(($5 - 1))
activity_array=($(echo ${activity_env[q]} | perl -pe "{s|@| |g}"))
teamer_num=${activity_array[0]}
team_num=${activity_array[1]}
export jd_zdjr_activityId=${activity_array[2]}
export jd_zdjr_activityUrl=${activity_array[3]}
echo -e "活动 ID (activityId) : $jd_zdjr_activityId"
echo -e "活动链接(activityUrl): $jd_zdjr_activityUrl"
run_js_in_team $3 $4
fi
elif [[ -n "$(echo $1|sed -n "/^[0-9]\+$/p")" ]] && [[ -n "$(echo $2|sed -n "/^[0-9]\+$/p")" ]]; then
# 每组队伍的成员数量
teamer_num=$1
# 单个账号最多发起的组队数量
team_num=$2
else
# 每组队伍的成员数量
teamer_num=$user_sum
# 单个账号最多发起的组队数量
team_num=1
fi
run_js_in_team $3 $4
else
echo "# 由于参数缺失,切换回 正常 Cookie 模式..."
export JD_COOKIE="$JD_COOKIE"
fi
}
## 分段模式算法
combine_segmentation(){
local delay_time="$3"
local interval_time="$4"
local jdCookie_priority jdCookie_team_part i j k m n
if [[ $1 ]] && [[ $2 ]]; then
# 固定区账号数量
[[ -n "$(echo $1|sed -n "/^[0-9]\+$/p")" ]] && fixed_num=$1 || fixed_num="0"
# 每段账号总数量
[[ -n "$(echo $2|sed -n "/^[0-9]\+$/p")" ]] && teamer_total_num=$2 || teamer_total_num=$ori_user_sum
if [[ $fixed_num -ge $teamer_total_num ]]; then
echo "# 固定账号数量不得大于或等于每段账号总数量,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
elif [[ $teamer_total_num -ge $ori_user_sum ]]; then
echo "# 分段账号数量不得大于或等于有效账号总数量,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
elif [[ $fixed_num -lt $teamer_total_num ]]; then
echo "# 正在应用 分段Cookie 模式..."
local teamer_num="$((teamer_total_num - fixed_num))"
local team_total_num=$(((ori_user_sum - fixed_num + teamer_num -1)/teamer_num)) && [[ $team_total_num -lt 1 ]] && team_total_num=1
echo -n "# 当前总共 $user_sum 个有效账号"
[[ $fixed_num -ne 0 ]] && echo -n ",其中前 $fixed_num 个账号为固定顺序"
echo -n "。每 $teamer_total_num 个账号分一段,一共分 $team_total_num 段。"
if [[ -n "$(echo $3|perl -pe "{s|\.\|s\|m\|h\|d||g}"|sed -n "/^[0-9]\+$/p")" ]]; then
temp_status="1"
delay_time="$(echo $3|perl -pe "{s|([a-z])(\d)+|\1 \2|g;}")"
echo -e "各分段启动脚本的延隔时间为`format_time $3`。"
echo -e "# 注意:如果每段的运行时间较长且延隔时间设定较短,运行日志可能会显示混乱,此为正常现象。"
elif [[ $3 = 0 ]]; then
temp_status="2"
delay_time="0"
echo -e "所有分段并发启动脚本,可能会占用较高的系统资源导致卡顿。"
echo -e "# 注意:运行日志会显示混乱,此为正常现象。"
elif [[ $3 = "-" ]] && [[ -n "$(echo $4|perl -pe "{s|\.\|s\|m\|h\|d||g}"|sed -n "/^[0-9]\+$/p")" ]] ; then
temp_status="3"
interval_time="$(echo $4|perl -pe "{s|([a-z])(\d)|\1 \2|g;}")"
echo -e ""
else
temp_status="3"
delay_time="0"
interval_time="0"
echo -e ""
fi
for ((m = 0; m < $fixed_num; m++)); do
[[ ! ${ori_array[m]} ]] && continue
tmp="${ori_array[m]}"
jdCookie_priority="$jdCookie_priority&$tmp"
done
for ((i = 0; i < $team_total_num; i++)); do
j=$((i + 1))
m=$((teamer_num * i + fixed_num))
n=$((teamer_num * j + fixed_num))
[[ $n -gt $ori_user_sum ]] && n=$ori_user_sum
t=$n && [[ $user_sum -lt $t ]] && t=$user_sum
jdCookie_team_part=""
for ((k = m; k < $t; k++)); do
[[ ! ${ori_array[k]} ]] && continue
tmp="${ori_array[k]}"
jdCookie_team_part="$jdCookie_team_part&$tmp"
done
jdCookie_4=$(echo $jdCookie_priority$jdCookie_team_part | perl -pe "{s|^&+\|&+$||g}")
if [[ $jdCookie_4 ]]; then
export JD_COOKIE="$jdCookie_4"
#[[ $DEBUG_MODE = 1 ]] && echo $jdCookie_4
if [ $fixed_num -ne 0 ]; then
if [ $teamer_num -gt 1 ]; then
echo -e "\n# 本次提交的是前 $fixed_num 位账号及第 $((m + 1)) - $n 位账号。"
elif [ $teamer_num -eq 1 ]; then
echo -e "\n# 本次提交的是前 $fixed_num 位账号及第 $((m + 1)) 位账号。"
fi
elif [ $fixed_num -eq 0 ]; then
if [ $teamer_num -gt 1 ]; then
echo -e "\n# 本次提交的是第 $((m + 1)) - $n 位账号。"
elif [ $teamer_num -eq 1 ]; then
echo -e "\n# 本次提交的是第 $((m + 1)) 位账号。"
fi
fi
define_program "$local_scr"
if [ $temp_status = 3 ]; then
$which_program $local_scr_dir/$local_scr_name
[[ $interval_time != "0" ]] && echo -e "# 等待`format_time $interval_time`后开始进行下一段任务 ..."
sleep $interval_time
else
$which_program $local_scr_dir/$local_scr_name
sleep $delay_time
fi
fi
done
exit
fi
else
echo "# 由于参数缺失,本次暂不重组 Cookie ..."
export JD_COOKIE="$JD_COOKIE"
fi
}
## 末尾Cookie
combine_bottom(){
local array_bottom i
if [[ $Bottom_CK && ! $jdCookie_bottom ]]; then
bottom_ck="$(def_urldecode $Bottom_CK | perl -pe "{s|,| |g;}")"
i=0
for j in $(def_pin_sub $bottom_ck); do
[[ ! ${ori_array[j]} ]] && continue
array_bottom[i]=${ori_array[j]}
unset ori_array[j]
let i++
done
jdCookie_bottom="&$(echo ${array_bottom[@]} | sed 's# #\&#g')"
user_bottom_sum=${#array_bottom[*]}
fi
}
# 格式化时间
format_time(){
for i in $@; do
if [[ -n "$(echo $i|perl -pe "{s|\.||g}"|sed -n "/^[0-9]\+$/p")" ]]; then
time_text=" $i 秒"
elif [[ -n "$(echo $i|perl -pe "{s|\.\|s\|m\|h\|d||g}"|sed -n "/^[0-9]\+$/p")" ]]; then
time_text="$(echo $i|perl -pe "{s|([a-z])(\d)+|\1 \2|g; s|s| 秒|g; s|m| 分|g; s|h| 小时|g; s|d| 天|g; s|^| |g; s|(\d+)$|\1 秒|g;}")"
fi
echo -n "$time_text"
done
}
# Cookie 环境变量迭代导入
[[ $jdCookie_4 ]] && array=($(echo $jdCookie_4 | sed 's/&/ /g')) && user_sum=${#array[*]}
case $Recombin_CK_Mode in
1)
combine_random $Recombin_CK_ARG1
;;
2)
combine_priority $Recombin_CK_ARG1
;;
3)
combine_rotation $Recombin_CK_ARG1 $Recombin_CK_ARG2
;;
4)
combine_team $Recombin_CK_ARG1 $Recombin_CK_ARG2 $Recombin_CK_ARG3 $Recombin_CK_ARG4 $Recombin_CK_ARG5
;;
5)
combine_segmentation $Recombin_CK_ARG1 $Recombin_CK_ARG2 $Recombin_CK_ARG3 $Recombin_CK_ARG4
;;
*)
export JD_COOKIE="$JD_COOKIE"
;;
esac
}
## 组合互助码格式化为全局变量的函数
combine_sub() {
#source $file_env
local what_combine=$1
local combined_all=""
local tmp1 tmp2
local TempBlockCookieInterval="$(echo $TempBlockCookie | perl -pe "{s|~|-|; s|_|-|}" | sed 's/\(\d\+\)-\(\d\+\)/{\1..\2}/g')"
local TempBlockCookieArray=($(eval echo $TempBlockCookieInterval))
local envs=$(eval echo "\$JD_COOKIE")
local array=($(echo $envs | sed 's/&/ /g'))
local user_sum=${#array[*]}
local a b i j t sum combined_all
for ((i=1; i <= $user_sum; i++)); do
local tmp1=$what_combine$i
local tmp2=${!tmp1}
[[ ${tmp2} ]] && sum=$i || break
done
[[ ! $sum ]] && sum=$user_sum
for ((j = 1; j <= $sum; j++)); do
a=$temp_user_sum
b=$sum
if [[ $a -ne $b ]]; then
for ((t = 0; t < ${#TempBlockCookieArray[*]}; t++)); do
[[ "${TempBlockCookieArray[t]}" = "$j" ]] && continue 2
done
fi
local tmp1=$what_combine$j
local tmp2=${!tmp1}
combined_all="$combined_all&$tmp2"
done
echo $combined_all | perl -pe "{s|^&||; s|^@+||; s|&@|&|g; s|@+&|&|g; s|@+|@|g; s|@+$||}"
}
## 正常依次运行时,组合互助码格式化为全局变量
combine_all() {
for ((i = 0; i < ${#env_name[*]}; i++)); do
result=$(combine_sub ${var_name[i]})
if [[ $result ]]; then
export ${env_name[i]}="$result"
fi
done
}
## 正常依次运行时,组合互助码格式化为全局变量
combine_only() {
for ((i = 0; i < ${#env_name[*]}; i++)); do
case $local_scr in
*${name_js[i]}*.js | *${name_js[i]}*.ts)
if [[ -f $dir_log/.ShareCode/${name_config[i]}.log ]]; then
. $dir_log/.ShareCode/${name_config[i]}.log
result=$(combine_sub ${var_name[i]})
if [[ $result ]]; then
export ShareCodeConfigChineseName=${name_chinese[i]}
export ShareCodeConfigName=${name_config[i]}
export ShareCodeEnvName=${env_name[i]}
fi
fi
;;
*)
export ${env_name[i]}=""
;;
esac
done
}
## 提前替换js基础依赖
JS_Deps_Replace() {
if [ $js_deps_replace_envs ]; then
local js_deps_replace_array=($(echo $js_deps_replace_envs | perl -pe "{s|&| |g}"))
for i in "${js_deps_replace_array[@]}"; do
local tmp_task_array=($(echo $i | perl -pe "{s|@| |g}"))
local tmp_script_array=($(echo ${tmp_task_array[0]} | perl -pe "{s/\|/ /g}"))
local tmp_skip_repo=($(echo ${tmp_task_array[1]} | perl -pe "{s/\|/ /g}"))
for j in "${tmp_script_array[@]}"; do
[[ ! $repo_dir ]] || [[ $repo_dir && ! ${tmp_skip_repo[@]} =~ $repo_dir ]] && [[ -f $dir_config/$j.js && $local_scr_dir ]] && cp -rf $dir_config/$j.js $local_scr_dir/$j.js
done
done
fi
}
[[ -f $dir_scripts/CK_WxPusherUid.json && $local_scr_dir && $local_scr_dir != $dir_scripts ]] && cp -rf $dir_scripts/CK_WxPusherUid.json $local_scr_dir/CK_WxPusherUid.json
#source $file_env
gen_pt_pin_array
#JS_Deps_Replace
TempBlock_CK
#remove_void_ck
if [[ $* != *desi* && $* != *conc* ]];then
Recombin_CK
fi
combine_only