Upload
231
Conf/Qinglong/2021-06-05-21-30-00.log
Normal file
@ -0,0 +1,231 @@
|
||||
|
||||
# 从日志提取互助码,编号和配置文件中Cookie编号完全对应,如果为空就是所有日志中都没有。
|
||||
|
||||
# 即使某个MyXxx变量未赋值,也可以将其变量名填在ForOtherXxx中,jtask脚本会自动过滤空值。
|
||||
|
||||
# 你选择的互助码模板为:所有账号助力码全部一致。
|
||||
|
||||
## 东东农场:
|
||||
MyFruit1=''
|
||||
MyFruit2=''
|
||||
MyFruit3=''
|
||||
MyFruit4=''
|
||||
MyFruit5=''
|
||||
|
||||
ForOtherFruit1="${MyFruit1}@${MyFruit2}@${MyFruit3}@${MyFruit4}@${MyFruit5}"
|
||||
ForOtherFruit2="${ForOtherFruit1}"
|
||||
ForOtherFruit3="${ForOtherFruit1}"
|
||||
ForOtherFruit4="${ForOtherFruit1}"
|
||||
ForOtherFruit5="${ForOtherFruit1}"
|
||||
ForOtherFruit6="${ForOtherFruit1}"
|
||||
ForOtherFruit7="${ForOtherFruit1}"
|
||||
ForOtherFruit8="${ForOtherFruit1}"
|
||||
ForOtherFruit9="${ForOtherFruit1}"
|
||||
ForOtherFruit10="${ForOtherFruit1}"
|
||||
|
||||
## 东东萌宠:
|
||||
MyPet1=''
|
||||
MyPet2=''
|
||||
MyPet3=''
|
||||
MyPet4=''
|
||||
MyPet5=''
|
||||
|
||||
ForOtherPet1="${MyPet1}@${MyPet2}@${MyPet3}@${MyPet4}@${MyPet5}"
|
||||
ForOtherPet2="${ForOtherPet1}"
|
||||
ForOtherPet3="${ForOtherPet1}"
|
||||
ForOtherPet4="${ForOtherPet1}"
|
||||
ForOtherPet5="${ForOtherPet1}"
|
||||
ForOtherPet6="${ForOtherPet1}"
|
||||
ForOtherPet7="${ForOtherPet1}"
|
||||
ForOtherPet8="${ForOtherPet1}"
|
||||
ForOtherPet9="${ForOtherPet1}"
|
||||
ForOtherPet10="${ForOtherPet1}"
|
||||
|
||||
## 种豆得豆:
|
||||
MyBean1=''
|
||||
MyBean2=''
|
||||
MyBean3=''
|
||||
MyBean4=''
|
||||
MyBean5=''
|
||||
|
||||
ForOtherBean1="${MyBean1}@${MyBean2}@${MyBean3}@${MyBean4}@${MyBean5}"
|
||||
ForOtherBean2="${ForOtherBean1}"
|
||||
ForOtherBean3="${ForOtherBean1}"
|
||||
ForOtherBean4="${ForOtherBean1}"
|
||||
ForOtherBean5="${ForOtherBean1}"
|
||||
ForOtherBean6="${ForOtherBean1}"
|
||||
ForOtherBean7="${ForOtherBean1}"
|
||||
ForOtherBean8="${ForOtherBean1}"
|
||||
ForOtherBean9="${ForOtherBean1}"
|
||||
ForOtherBean10="${ForOtherBean1}"
|
||||
|
||||
## 京喜工厂:
|
||||
MyDreamFactory1=''
|
||||
MyDreamFactory2=''
|
||||
MyDreamFactory3=''
|
||||
MyDreamFactory4=''
|
||||
MyDreamFactory5=''
|
||||
|
||||
ForOtherDreamFactory1="${MyDreamFactory1}@${MyDreamFactory2}@${MyDreamFactory3}@${MyDreamFactory4}@${MyDreamFactory5}"
|
||||
ForOtherDreamFactory2="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory3="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory4="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory5="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory6="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory7="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory8="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory9="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory10="${ForOtherDreamFactory1}"
|
||||
|
||||
## 东东工厂:
|
||||
MyJdFactory1=''
|
||||
MyJdFactory2=''
|
||||
MyJdFactory3=''
|
||||
MyJdFactory4=''
|
||||
MyJdFactory5=''
|
||||
|
||||
ForOtherJdFactory1="${MyJdFactory1}@${MyJdFactory2}@${MyJdFactory3}@${MyJdFactory4}@${MyJdFactory5}"
|
||||
ForOtherJdFactory2="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory3="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory4="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory5="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory6="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory7="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory8="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory9="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory10="${ForOtherJdFactory1}"
|
||||
|
||||
## 京东赚赚:
|
||||
MyJdzz1=''
|
||||
MyJdzz2=''
|
||||
MyJdzz3=''
|
||||
MyJdzz4=''
|
||||
MyJdzz5=''
|
||||
|
||||
ForOtherJdzz1="${MyJdzz1}@${MyJdzz2}@${MyJdzz3}@${MyJdzz4}@${MyJdzz5}"
|
||||
ForOtherJdzz2="${ForOtherJdzz1}"
|
||||
ForOtherJdzz3="${ForOtherJdzz1}"
|
||||
ForOtherJdzz4="${ForOtherJdzz1}"
|
||||
ForOtherJdzz5="${ForOtherJdzz1}"
|
||||
ForOtherJdzz6="${ForOtherJdzz1}"
|
||||
ForOtherJdzz7="${ForOtherJdzz1}"
|
||||
ForOtherJdzz8="${ForOtherJdzz1}"
|
||||
ForOtherJdzz9="${ForOtherJdzz1}"
|
||||
ForOtherJdzz10="${ForOtherJdzz1}"
|
||||
|
||||
## 疯狂的JOY:
|
||||
MyJoy1=''
|
||||
MyJoy2=''
|
||||
MyJoy3=''
|
||||
MyJoy4=''
|
||||
MyJoy5=''
|
||||
|
||||
ForOtherJoy1="${MyJoy1}@${MyJoy2}@${MyJoy3}@${MyJoy4}@${MyJoy5}"
|
||||
ForOtherJoy2="${ForOtherJoy1}"
|
||||
ForOtherJoy3="${ForOtherJoy1}"
|
||||
ForOtherJoy4="${ForOtherJoy1}"
|
||||
ForOtherJoy5="${ForOtherJoy1}"
|
||||
ForOtherJoy6="${ForOtherJoy1}"
|
||||
ForOtherJoy7="${ForOtherJoy1}"
|
||||
ForOtherJoy8="${ForOtherJoy1}"
|
||||
ForOtherJoy9="${ForOtherJoy1}"
|
||||
ForOtherJoy10="${ForOtherJoy1}"
|
||||
|
||||
## 京喜农场:
|
||||
MyJxnc1=''
|
||||
MyJxnc2=''
|
||||
MyJxnc3=''
|
||||
MyJxnc4=''
|
||||
MyJxnc5=''
|
||||
|
||||
ForOtherJxnc1="${MyJxnc1}@${MyJxnc2}@${MyJxnc3}@${MyJxnc4}@${MyJxnc5}"
|
||||
ForOtherJxnc2="${ForOtherJxnc1}"
|
||||
ForOtherJxnc3="${ForOtherJxnc1}"
|
||||
ForOtherJxnc4="${ForOtherJxnc1}"
|
||||
ForOtherJxnc5="${ForOtherJxnc1}"
|
||||
ForOtherJxnc6="${ForOtherJxnc1}"
|
||||
ForOtherJxnc7="${ForOtherJxnc1}"
|
||||
ForOtherJxnc8="${ForOtherJxnc1}"
|
||||
ForOtherJxnc9="${ForOtherJxnc1}"
|
||||
ForOtherJxnc10="${ForOtherJxnc1}"
|
||||
|
||||
## 口袋书店:
|
||||
## 从日志中未找到任何互助码
|
||||
|
||||
## 签到领现金:
|
||||
## 从日志中未找到任何互助码
|
||||
|
||||
## 闪购盲盒:
|
||||
MySgmh1=''
|
||||
MySgmh2=''
|
||||
MySgmh3=''
|
||||
MySgmh4=''
|
||||
MySgmh5=''
|
||||
|
||||
ForOtherSgmh1="${MySgmh1}@${MySgmh2}@${MySgmh3}@${MySgmh4}@${MySgmh5}"
|
||||
ForOtherSgmh2="${ForOtherSgmh1}"
|
||||
ForOtherSgmh3="${ForOtherSgmh1}"
|
||||
ForOtherSgmh4="${ForOtherSgmh1}"
|
||||
ForOtherSgmh5="${ForOtherSgmh1}"
|
||||
ForOtherSgmh6="${ForOtherSgmh1}"
|
||||
ForOtherSgmh7="${ForOtherSgmh1}"
|
||||
ForOtherSgmh8="${ForOtherSgmh1}"
|
||||
ForOtherSgmh9="${ForOtherSgmh1}"
|
||||
ForOtherSgmh10="${ForOtherSgmh1}"
|
||||
|
||||
## 京喜财富岛:
|
||||
MyCfd1=''
|
||||
MyCfd2=''
|
||||
MyCfd3=''
|
||||
MyCfd4=''
|
||||
MyCfd5=''
|
||||
|
||||
ForOtherCfd1="${MyCfd1}@${MyCfd2}@${MyCfd3}@${MyCfd4}@${MyCfd5}"
|
||||
ForOtherCfd2="${ForOtherCfd1}"
|
||||
ForOtherCfd3="${ForOtherCfd1}"
|
||||
ForOtherCfd4="${ForOtherCfd1}"
|
||||
ForOtherCfd5="${ForOtherCfd1}"
|
||||
ForOtherCfd6="${ForOtherCfd1}"
|
||||
ForOtherCfd7="${ForOtherCfd1}"
|
||||
ForOtherCfd8="${ForOtherCfd1}"
|
||||
ForOtherCfd9="${ForOtherCfd1}"
|
||||
ForOtherCfd10="${ForOtherCfd1}"
|
||||
|
||||
## 东东健康社区:
|
||||
MyHealth1=''
|
||||
MyHealth2=''
|
||||
MyHealth3=''
|
||||
MyHealth4=''
|
||||
MyHealth5=''
|
||||
|
||||
ForOtherHealth1="${MyHealth1}@${MyHealth2}@${MyHealth3}@${MyHealth4}@${MyHealth5}"
|
||||
ForOtherHealth2="${ForOtherHealth1}"
|
||||
ForOtherHealth3="${ForOtherHealth1}"
|
||||
ForOtherHealth4="${ForOtherHealth1}"
|
||||
ForOtherHealth5="${ForOtherHealth1}"
|
||||
ForOtherHealth6="${ForOtherHealth1}"
|
||||
ForOtherHealth7="${ForOtherHealth1}"
|
||||
ForOtherHealth8="${ForOtherHealth1}"
|
||||
ForOtherHealth9="${ForOtherHealth1}"
|
||||
ForOtherHealth10="${ForOtherHealth1}"
|
||||
|
||||
## 京东手机狂欢城:
|
||||
MyCarnivalcity1=''
|
||||
MyCarnivalcity2=''
|
||||
MyCarnivalcity3=''
|
||||
MyCarnivalcity4=''
|
||||
MyCarnivalcity5=''
|
||||
|
||||
ForOtherCarnivalcity1="${MyCarnivalcity1}@${MyCarnivalcity2}@${MyCarnivalcity3}@${MyCarnivalcity4}@${MyCarnivalcity5}"
|
||||
ForOtherCarnivalcity2="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity3="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity4="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity5="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity6="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity7="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity8="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity9="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity10="${ForOtherCarnivalcity1}"
|
||||
|
||||
## 618动物联萌:
|
||||
## 从日志中未找到任何互助码
|
||||
236
Conf/Qinglong/Template.log
Normal file
@ -0,0 +1,236 @@
|
||||
|
||||
# 从日志提取互助码,编号和配置文件中Cookie编号完全对应,如果为空就是所有日志中都没有。
|
||||
|
||||
# 即使某个MyXxx变量未赋值,也可以将其变量名填在ForOtherXxx中,jtask脚本会自动过滤空值。
|
||||
|
||||
# 你选择的互助码模板为:所有账号助力码全部一致。
|
||||
|
||||
## 东东农场:
|
||||
MyFruit1="
|
||||
MyFruit2="
|
||||
MyFruit3="
|
||||
MyFruit4="
|
||||
MyFruit5="
|
||||
MyFruit6="
|
||||
MyFruit7="
|
||||
|
||||
ForOtherFruit1="${MyFruit1}@${MyFruit2}@${MyFruit3}@${MyFruit4}@${MyFruit5}@${MyFruit6}@${MyFruit7}"
|
||||
ForOtherFruit2="${ForOtherFruit1}"
|
||||
ForOtherFruit3="${ForOtherFruit1}"
|
||||
ForOtherFruit4="${ForOtherFruit1}"
|
||||
ForOtherFruit5="${ForOtherFruit1}"
|
||||
ForOtherFruit6="${ForOtherFruit1}"
|
||||
ForOtherFruit7="${ForOtherFruit1}"
|
||||
|
||||
## 东东萌宠:
|
||||
MyPet1="
|
||||
MyPet2="
|
||||
MyPet3="
|
||||
MyPet4="
|
||||
MyPet5="
|
||||
MyPet6="
|
||||
MyPet7="
|
||||
|
||||
ForOtherPet1="${MyPet1}@${MyPet2}@${MyPet3}@${MyPet4}@${MyPet5}@${MyPet6}@${MyPet7}"
|
||||
ForOtherPet2="${ForOtherPet1}"
|
||||
ForOtherPet3="${ForOtherPet1}"
|
||||
ForOtherPet4="${ForOtherPet1}"
|
||||
ForOtherPet5="${ForOtherPet1}"
|
||||
ForOtherPet6="${ForOtherPet1}"
|
||||
ForOtherPet7="${ForOtherPet1}"
|
||||
|
||||
## 种豆得豆:
|
||||
MyBean1="
|
||||
MyBean2="
|
||||
MyBean3="
|
||||
MyBean4="
|
||||
MyBean5="
|
||||
MyBean6="
|
||||
MyBean7="
|
||||
|
||||
ForOtherBean1="${MyBean1}@${MyBean2}@${MyBean3}@${MyBean4}@${MyBean5}@${MyBean6}@${MyBean7}"
|
||||
ForOtherBean2="${ForOtherBean1}"
|
||||
ForOtherBean3="${ForOtherBean1}"
|
||||
ForOtherBean4="${ForOtherBean1}"
|
||||
ForOtherBean5="${ForOtherBean1}"
|
||||
ForOtherBean6="${ForOtherBean1}"
|
||||
ForOtherBean7="${ForOtherBean1}"
|
||||
|
||||
## 京喜工厂:
|
||||
MyDreamFactory1="
|
||||
MyDreamFactory2="
|
||||
MyDreamFactory3="
|
||||
MyDreamFactory4="
|
||||
MyDreamFactory5="
|
||||
MyDreamFactory6="
|
||||
MyDreamFactory7="
|
||||
|
||||
ForOtherDreamFactory1="${MyDreamFactory1}@${MyDreamFactory2}@${MyDreamFactory3}@${MyDreamFactory4}@${MyDreamFactory5}@${MyDreamFactory6}@${MyDreamFactory7}"
|
||||
ForOtherDreamFactory2="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory3="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory4="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory5="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory6="${ForOtherDreamFactory1}"
|
||||
ForOtherDreamFactory7="${ForOtherDreamFactory1}"
|
||||
|
||||
## 东东工厂:
|
||||
MyJdFactory1="
|
||||
MyJdFactory2="
|
||||
MyJdFactory3="
|
||||
MyJdFactory4="
|
||||
MyJdFactory5="
|
||||
MyJdFactory6="
|
||||
MyJdFactory7="
|
||||
|
||||
ForOtherJdFactory1="${MyJdFactory1}@${MyJdFactory2}@${MyJdFactory3}@${MyJdFactory4}@${MyJdFactory5}@${MyJdFactory6}@${MyJdFactory7}"
|
||||
ForOtherJdFactory2="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory3="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory4="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory5="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory6="${ForOtherJdFactory1}"
|
||||
ForOtherJdFactory7="${ForOtherJdFactory1}"
|
||||
|
||||
## 京东赚赚:
|
||||
MyJdzz1="
|
||||
MyJdzz2="
|
||||
MyJdzz3="
|
||||
MyJdzz4="
|
||||
MyJdzz5="
|
||||
MyJdzz6="
|
||||
MyJdzz7="
|
||||
|
||||
ForOtherJdzz1="${MyJdzz1}@${MyJdzz2}@${MyJdzz3}@${MyJdzz4}@${MyJdzz5}@${MyJdzz6}@${MyJdzz7}"
|
||||
ForOtherJdzz2="${ForOtherJdzz1}"
|
||||
ForOtherJdzz3="${ForOtherJdzz1}"
|
||||
ForOtherJdzz4="${ForOtherJdzz1}"
|
||||
ForOtherJdzz5="${ForOtherJdzz1}"
|
||||
ForOtherJdzz6="${ForOtherJdzz1}"
|
||||
ForOtherJdzz7="${ForOtherJdzz1}"
|
||||
|
||||
## 疯狂的JOY:
|
||||
MyJoy1="
|
||||
MyJoy2="
|
||||
MyJoy3="
|
||||
MyJoy4="
|
||||
MyJoy5="
|
||||
MyJoy6="
|
||||
MyJoy7="
|
||||
|
||||
ForOtherJoy1="${MyJoy1}@${MyJoy2}@${MyJoy3}@${MyJoy4}@${MyJoy5}@${MyJoy6}@${MyJoy7}"
|
||||
ForOtherJoy2="${ForOtherJoy1}"
|
||||
ForOtherJoy3="${ForOtherJoy1}"
|
||||
ForOtherJoy4="${ForOtherJoy1}"
|
||||
ForOtherJoy5="${ForOtherJoy1}"
|
||||
ForOtherJoy6="${ForOtherJoy1}"
|
||||
ForOtherJoy7="${ForOtherJoy1}"
|
||||
|
||||
## 京喜农场:
|
||||
MyJxnc1="
|
||||
MyJxnc2="
|
||||
MyJxnc3="
|
||||
MyJxnc4="
|
||||
MyJxnc5="
|
||||
MyJxnc6="
|
||||
MyJxnc7="
|
||||
|
||||
ForOtherJxnc1="${MyJxnc1}@${MyJxnc2}@${MyJxnc3}@${MyJxnc4}@${MyJxnc5}@${MyJxnc6}@${MyJxnc7}"
|
||||
ForOtherJxnc2="${ForOtherJxnc1}"
|
||||
ForOtherJxnc3="${ForOtherJxnc1}"
|
||||
ForOtherJxnc4="${ForOtherJxnc1}"
|
||||
ForOtherJxnc5="${ForOtherJxnc1}"
|
||||
ForOtherJxnc6="${ForOtherJxnc1}"
|
||||
ForOtherJxnc7="${ForOtherJxnc1}"
|
||||
|
||||
## 口袋书店:
|
||||
## 从日志中未找到任何互助码
|
||||
|
||||
## 签到领现金:
|
||||
## 从日志中未找到任何互助码
|
||||
|
||||
## 闪购盲盒:
|
||||
MySgmh1="
|
||||
MySgmh2="
|
||||
MySgmh3="
|
||||
MySgmh4="
|
||||
MySgmh5="
|
||||
MySgmh6="
|
||||
MySgmh7="
|
||||
|
||||
ForOtherSgmh1="${MySgmh1}@${MySgmh2}@${MySgmh3}@${MySgmh4}@${MySgmh5}@${MySgmh6}@${MySgmh7}"
|
||||
ForOtherSgmh2="${ForOtherSgmh1}"
|
||||
ForOtherSgmh3="${ForOtherSgmh1}"
|
||||
ForOtherSgmh4="${ForOtherSgmh1}"
|
||||
ForOtherSgmh5="${ForOtherSgmh1}"
|
||||
ForOtherSgmh6="${ForOtherSgmh1}"
|
||||
ForOtherSgmh7="${ForOtherSgmh1}"
|
||||
|
||||
## 京喜财富岛:
|
||||
MyCfd1="
|
||||
MyCfd2="
|
||||
MyCfd3="
|
||||
MyCfd4="
|
||||
MyCfd5="
|
||||
MyCfd6="
|
||||
MyCfd7="
|
||||
|
||||
ForOtherCfd1="${MyCfd1}@${MyCfd2}@${MyCfd3}@${MyCfd4}@${MyCfd5}@${MyCfd6}@${MyCfd7}"
|
||||
ForOtherCfd2="${ForOtherCfd1}"
|
||||
ForOtherCfd3="${ForOtherCfd1}"
|
||||
ForOtherCfd4="${ForOtherCfd1}"
|
||||
ForOtherCfd5="${ForOtherCfd1}"
|
||||
ForOtherCfd6="${ForOtherCfd1}"
|
||||
ForOtherCfd7="${ForOtherCfd1}"
|
||||
|
||||
## 东东健康社区:
|
||||
MyHealth1="
|
||||
MyHealth2="
|
||||
MyHealth3="
|
||||
MyHealth4="
|
||||
MyHealth5="
|
||||
MyHealth6="
|
||||
MyHealth7="
|
||||
|
||||
ForOtherHealth1="${MyHealth1}@${MyHealth2}@${MyHealth3}@${MyHealth4}@${MyHealth5}@${MyHealth6}@${MyHealth7}"
|
||||
ForOtherHealth2="${ForOtherHealth1}"
|
||||
ForOtherHealth3="${ForOtherHealth1}"
|
||||
ForOtherHealth4="${ForOtherHealth1}"
|
||||
ForOtherHealth5="${ForOtherHealth1}"
|
||||
ForOtherHealth6="${ForOtherHealth1}"
|
||||
ForOtherHealth7="${ForOtherHealth1}"
|
||||
|
||||
## 京东手机狂欢城:
|
||||
MyCarnivalcity1="
|
||||
MyCarnivalcity2="
|
||||
MyCarnivalcity3="
|
||||
MyCarnivalcity4="
|
||||
MyCarnivalcity5="
|
||||
MyCarnivalcity6="
|
||||
MyCarnivalcity7="
|
||||
|
||||
ForOtherCarnivalcity1="${MyCarnivalcity1}@${MyCarnivalcity2}@${MyCarnivalcity3}@${MyCarnivalcity4}@${MyCarnivalcity5}@${MyCarnivalcity6}@${MyCarnivalcity7}"
|
||||
ForOtherCarnivalcity2="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity3="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity4="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity5="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity6="${ForOtherCarnivalcity1}"
|
||||
ForOtherCarnivalcity7="${ForOtherCarnivalcity1}"
|
||||
|
||||
## 城城领现金:
|
||||
MyCity1="
|
||||
MyCity2="
|
||||
MyCity3="
|
||||
MyCity4="
|
||||
MyCity5="
|
||||
MyCity6="
|
||||
MyCity7="
|
||||
|
||||
ForOtherCity1="${MyCity1}@${MyCity2}@${MyCity3}@${MyCity4}@${MyCity5}@${MyCity6}@${MyCity7}"
|
||||
ForOtherCity2="${ForOtherCity1}"
|
||||
ForOtherCity3="${ForOtherCity1}"
|
||||
ForOtherCity4="${ForOtherCity1}"
|
||||
ForOtherCity5="${ForOtherCity1}"
|
||||
ForOtherCity6="${ForOtherCity1}"
|
||||
ForOtherCity7="${ForOtherCity1}"
|
||||
|
||||
## 618动物联萌:
|
||||
## 从日志中未找到任何互助码
|
||||
142
Conf/Qinglong/config.sh
Normal file
@ -0,0 +1,142 @@
|
||||
## Version: v2.0.0-05302045
|
||||
## Date: 2021-05-30
|
||||
## Update Content: 增加GithubProxyUrl参数,访问github链接不需要代理时,可移除此参数
|
||||
|
||||
## 上面版本号中,如果第2位数字有变化,那么代表增加了新的参数,如果只有第3位数字有变化,仅代表更新了注释,没有增加新的参数,可更新可不更新
|
||||
|
||||
## 在运行 ql repo 命令时,是否自动删除失效的脚本与定时任务
|
||||
AutoDelCron="true"
|
||||
|
||||
## 在运行 ql repo 命令时,是否自动增加新的本地定时任务
|
||||
AutoAddCron="true"
|
||||
|
||||
## 由于github仓库拉取较慢,所以会默认添加代理前缀,如不需要请移除
|
||||
GithubProxyUrl="https://ghproxy.com/"
|
||||
|
||||
## 设置定时任务执行的超时时间,默认1h,后缀"s"代表秒(默认值), "m"代表分, "h"代表小时, "d"代表天
|
||||
CommandTimeoutTime="1h"
|
||||
|
||||
## 设置批量执行任务时的并发数,默认同时执行5个任务
|
||||
MaxConcurrentNum="5"
|
||||
|
||||
## 在运行 task 命令时,随机延迟启动任务的最大延迟时间
|
||||
## 默认给javascript任务加随机延迟,如 RandomDelay="300" ,表示任务将在 1-300 秒内随机延迟一个秒数,然后再运行,取消延迟赋值为空
|
||||
RandomDelay="300"
|
||||
|
||||
## 如果你自己会写shell脚本,并且希望在每次运行 ql update 命令时,额外运行你的 shell 脚本,请赋值为 "true",默认为true
|
||||
EnableExtraShell="true"
|
||||
|
||||
## 自动按顺序进行账号间互助(选填) 设置为 true 时,将直接导入code最新日志来进行互助
|
||||
AutoHelpOther="true"
|
||||
|
||||
## 定义 jcode 脚本导出的互助码模板样式(选填)
|
||||
## 不填 使用“按编号顺序助力模板”,Cookie编号在前的优先助力
|
||||
## 填 0 使用“全部一致助力模板”,所有账户要助力的码全部一致
|
||||
## 填 1 使用“均等机会助力模板”,所有账户获得助力次数一致
|
||||
## 填 2 使用“随机顺序助力模板”,本套脚本内账号间随机顺序助力,每次生成的顺序都不一致。
|
||||
HelpType="0"
|
||||
|
||||
## 是否自动启动bot,默认不启动,设置为true时自动启动,目前需要自行克隆bot仓库所需代码,存到ql/repo目录下,文件夹命名为dockerbot
|
||||
AutoStartBot=""
|
||||
|
||||
## 安装bot依赖时指定pip源,默认使用清华源,如不需要源,设置此参数为空
|
||||
PipMirror="https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||
|
||||
## 需组合的环境变量列表,env_name需要和var_name一一对应,如何有新活动按照格式添加(不懂勿动)
|
||||
env_name=(
|
||||
JD_COOKIE
|
||||
FRUITSHARECODES
|
||||
PETSHARECODES
|
||||
PLANT_BEAN_SHARECODES
|
||||
DREAM_FACTORY_SHARE_CODES
|
||||
DDFACTORY_SHARECODES
|
||||
JDZZ_SHARECODES
|
||||
JDJOY_SHARECODES
|
||||
JXNC_SHARECODES
|
||||
BOOKSHOP_SHARECODES
|
||||
JD_CASH_SHARECODES
|
||||
JDSGMH_SHARECODES
|
||||
JDCFD_SHARECODES
|
||||
JDHEALTH_SHARECODES
|
||||
JD818_SHARECODES
|
||||
)
|
||||
var_name=(
|
||||
Cookie
|
||||
ForOtherFruit
|
||||
ForOtherPet
|
||||
ForOtherBean
|
||||
ForOtherDreamFactory
|
||||
ForOtherJdFactory
|
||||
ForOtherJdzz
|
||||
ForOtherJoy
|
||||
ForOtherJxnc
|
||||
ForOtherBookShop
|
||||
ForOtherCash
|
||||
ForOtherSgmh
|
||||
ForOtherCfd
|
||||
ForOtherHealth
|
||||
ForOtherCarni
|
||||
)
|
||||
|
||||
## name_js为脚本文件名,如果使用ql repo命令拉取,文件名含有作者名
|
||||
## 所有有互助码的活动,把脚本名称列在 name_js 中,对应 config.sh 中互助码后缀列在 name_config 中,中文名称列在 name_chinese 中。
|
||||
## name_js、name_config 和 name_chinese 中的三个名称必须一一对应。
|
||||
name_js=(
|
||||
chinnkarahoi_jd_scripts_jd_fruit
|
||||
chinnkarahoi_jd_scripts_jd_pet
|
||||
chinnkarahoi_jd_scripts_jd_plantBean
|
||||
chinnkarahoi_jd_scripts_jd_dreamFactory
|
||||
chinnkarahoi_jd_scripts_jd_jdfactory
|
||||
chinnkarahoi_jd_scripts_jd_jdzz
|
||||
chinnkarahoi_jd_scripts_jd_crazy_joy
|
||||
chinnkarahoi_jd_scripts_jd_jxnc
|
||||
chinnkarahoi_jd_scripts_jd_bookshop
|
||||
chinnkarahoi_jd_scripts_jd_cash
|
||||
chinnkarahoi_jd_scripts_jd_sgmh
|
||||
chinnkarahoi_jd_scripts_jd_cfd
|
||||
chinnkarahoi_jd_scripts_jd_health
|
||||
chinnkarahoi_jd_scripts_jd_carnivalcity
|
||||
chinnkarahoi_jd_scripts_jd_zoo
|
||||
)
|
||||
name_config=(
|
||||
Fruit
|
||||
Pet
|
||||
Bean
|
||||
DreamFactory
|
||||
JdFactory
|
||||
Jdzz
|
||||
Joy
|
||||
Jxnc
|
||||
BookShop
|
||||
Cash
|
||||
Sgmh
|
||||
Cfd
|
||||
Health
|
||||
Carni
|
||||
Zoo
|
||||
)
|
||||
name_chinese=(
|
||||
东东农场
|
||||
东东萌宠
|
||||
京东种豆得豆
|
||||
京喜工厂
|
||||
东东工厂
|
||||
京东赚赚
|
||||
crazyJoy任务
|
||||
京喜农场
|
||||
口袋书店
|
||||
签到领现金
|
||||
闪购盲盒
|
||||
京喜财富岛
|
||||
东东健康社区
|
||||
京东手机狂欢城
|
||||
618动物联萌
|
||||
)
|
||||
|
||||
## 其他需要的变量,脚本中需要的变量使用 export 变量名= 声明即可
|
||||
export TG_BOT_TOKEN=""
|
||||
export TG_USER_ID=""
|
||||
export JOY_RUN_HELP_MYSELF="true"
|
||||
export FRUIT_NOTIFY_CONTROL="false"
|
||||
export JXNC_NOTIFY_LEVEL="0"
|
||||
export TUAN_ACTIVEID=""
|
||||
377
Conf/Readme.md
Normal file
@ -0,0 +1,377 @@
|
||||
# 常用环境变量备份表
|
||||
|
||||
|
||||
## 个人隐私类变量
|
||||
|
||||
```
|
||||
## 1、运行脚本时,是否显示log,默认显示,但会输出个人信息。
|
||||
## 默认值为true,引号中填写false则不显示,注重隐私的人可以自行设置为false
|
||||
export JD_DEBUG=""
|
||||
```
|
||||
|
||||
|
||||
## 通知类环境变量
|
||||
|
||||
```
|
||||
## 1. ServerChan
|
||||
export PUSH_KEY=""
|
||||
```
|
||||
|
||||
```
|
||||
## 2. BARK
|
||||
export BARK_PUSH=""
|
||||
export BARK_SOUND=""
|
||||
```
|
||||
|
||||
```
|
||||
## 3. Telegram
|
||||
export TG_BOT_TOKEN=""
|
||||
export TG_USER_ID=""
|
||||
```
|
||||
|
||||
```
|
||||
## 4. 钉钉
|
||||
export DD_BOT_TOKEN=""
|
||||
export DD_BOT_SECRET=""
|
||||
```
|
||||
|
||||
```
|
||||
## 5. iGot聚合推送。
|
||||
export IGOT_PUSH_KEY=""
|
||||
```
|
||||
|
||||
```
|
||||
## 6. Push Plus
|
||||
export PUSH_PLUS_TOKEN=""
|
||||
export PUSH_PLUS_USER=""
|
||||
```
|
||||
|
||||
```
|
||||
## 7. 企业微信机器人消息推送 webhook 后面的 key
|
||||
export QYWX_KEY=""
|
||||
```
|
||||
|
||||
```
|
||||
## 8. 企业微信应用消息推送的值
|
||||
export QYWX_AM=""
|
||||
```
|
||||
|
||||
```
|
||||
## 9. go-cqhttp
|
||||
## gobot_url 推送到个人QQ: http://127.0.0.1/send_private_msg 群:http://127.0.0.1/send_group_msg
|
||||
## gobot_token 填写在go-cqhttp文件设置的访问密钥
|
||||
## gobot_qq 如果GOBOT_URL设置 /send_private_msg 则需要填入 user_id=个人QQ 相反如果是 /send_group_msg 则需要填入 group_id=QQ群
|
||||
## go-cqhttp相关API https://docs.go-cqhttp.org/api
|
||||
export GOBOT_URL=""
|
||||
export GOBOT_TOKEN=""
|
||||
export GOBOT_QQ=""
|
||||
```
|
||||
|
||||
|
||||
## 定义每日签到的通知形式
|
||||
|
||||
```
|
||||
## js脚本每日签到提供3种通知方式,分别为:
|
||||
## 关闭通知,那么请在下方填入0
|
||||
## 简洁通知,那么请在下方填入1,其效果见:https://github.com/LXK9301/jd_scripts/blob/master/icon/bean_sign_simple.jpg
|
||||
## 原始通知,那么请在下方填入2,如果不填也默认为2,内容比较长,这也是默认通知方式
|
||||
NotifyBeanSign=""
|
||||
```
|
||||
|
||||
## 定义每日签到每个接口间的延迟时间
|
||||
|
||||
```
|
||||
## 默认每个签到接口并发无延迟,如需要依次进行每个接口,请自定义延迟时间,单位为毫秒,延迟作用于每个签到接口, 如填入延迟则切换顺序签到(耗时较长)
|
||||
export JD_BEAN_STOP=""
|
||||
```
|
||||
|
||||
|
||||
## 脚本推送控制类环境变量
|
||||
|
||||
```
|
||||
## 1、京东多合一签到脚本关闭运行结果推送,默认推送,填true表示不推送
|
||||
export JD_BEAN_SIGN_STOP_NOTIFY=""
|
||||
```
|
||||
|
||||
```
|
||||
## 2、京东多合一签到脚本推送简单结果,默认推送完整版结果,填true表示启用简单推送
|
||||
export JD_BEAN_SIGN_NOTIFY_SIMPLE=""
|
||||
```
|
||||
|
||||
```
|
||||
## 3、东东萌宠关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export PET_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 4、京东农场关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export FRUIT_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 5、京东领现金关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export CASH_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 6、京东摇钱树关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export MONEYTREE_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 7、京东点点券关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export DDQ_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 8、京东京东赚赚小程序关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export JDZZ_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 9、京东京东赚赚小程序关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export JDZZ_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 10、宠汪汪兑换京豆关闭推送。填写false为不关闭推送,true为关闭推送
|
||||
export JDZZ_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 11、宠汪汪赛跑获胜后是否推送通知。填false为不推送通知消息,true为推送通知消息
|
||||
export JOY_RUN_NOTIFY=""
|
||||
```
|
||||
|
||||
```
|
||||
## 12、东东超市兑换奖品是否关闭推送通知。填false为不关闭推送,true为关闭推送
|
||||
export JOY_RUN_NOTIFY=""
|
||||
```
|
||||
|
||||
```
|
||||
## 13、京喜财富岛控制是否运行脚本后通知。输入true为通知,不填则为不通知
|
||||
export CFD_NOTIFY_CONTROL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 14、京喜农场岛控制是否运行脚本后通知。0=只通知成熟;1=本次获得水滴>0;2=任务执行;3=任务执行+未种植种子
|
||||
export JXNC_NOTIFY_LEVEL=""
|
||||
```
|
||||
|
||||
|
||||
## 功能配置类环境变量
|
||||
|
||||
```
|
||||
## 1、京东领现金红包兑换京豆开关。false为不换,true为换(花费2元红包兑换200京豆,一周可换四次),默认为false
|
||||
export CASH_EXCHANGE=""
|
||||
```
|
||||
|
||||
```
|
||||
## 2、宠汪汪喂食数量。可以填的数字0,10,20,40,80,其他数字不可
|
||||
export JOY_FEED_COUNT=""
|
||||
```
|
||||
|
||||
```
|
||||
## 3、宠汪汪帮好友喂食。false为不帮,true为帮
|
||||
export JOY_HELP_FEED=""
|
||||
```
|
||||
|
||||
```
|
||||
## 4、宠汪汪是否赛跑(默认参加双人赛跑)。false为不跑,true为跑
|
||||
export JOY_HELP_FEED=""
|
||||
```
|
||||
|
||||
```
|
||||
## 5、宠汪汪参加什么级别的赛跑。可选数字为2,10,50,
|
||||
其中2代表参加双人PK赛,10代表参加10人突围赛,
|
||||
50代表参加50人挑战赛(注:此项功能在JOY_RUN_FLAG为true的时候才生效),
|
||||
如若想设置不同账号参加不同类别的比赛则用&区分即可(如下三个账号:2&10&50)
|
||||
export JOY_TEAM_LEVEL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 6、宠汪汪赛跑自己账号内部互助。输入true为开启内部互助
|
||||
export JOY_RUN_HELP_MYSELF=""
|
||||
```
|
||||
|
||||
```
|
||||
## 7、宠汪汪积分兑换多少京豆。目前可填值为20或者500,脚本默认0,0表示不兑换京豆
|
||||
export JD_JOY_REWARD_NAME=""
|
||||
```
|
||||
|
||||
```
|
||||
## 8、东东超市兑换京豆数量。目前可输入值为20或者1000,或者其他商品的名称,例如碧浪洗衣凝珠
|
||||
export MARKET_COIN_TO_BEANS=""
|
||||
```
|
||||
|
||||
```
|
||||
## 9、东东超市是否参加pk。true表示参加,false表示不参加
|
||||
export JOIN_PK_TEAM=""
|
||||
```
|
||||
|
||||
```
|
||||
## 10、东东超市是否用金币抽奖。true表示抽奖,false表示不抽奖
|
||||
export SUPERMARKET_LOTTERY=""
|
||||
```
|
||||
|
||||
```
|
||||
## 11、东东农场是否使用水滴换豆卡。true表示换,false表示不换
|
||||
export FRUIT_BEAN_CARD=""
|
||||
```
|
||||
|
||||
```
|
||||
## 12、是否取关商品。环境变量内容的意思依次是是否取关全部商品(0表示一个都不),是否取关全部店铺数(0表示一个都不),遇到此商品不再进行取关,遇到此店铺不再进行取关
|
||||
export UN_SUBSCRIBES=""
|
||||
```
|
||||
|
||||
```
|
||||
## 13、疯狂的JOY循环助力开关。true表示循环助力,false表示不循环助力,默认不开启循环助力
|
||||
export JDJOY_HELPSELF=""
|
||||
```
|
||||
|
||||
```
|
||||
## 14、疯狂的JOY京豆兑换。0表示不换,其他按可兑换数填写。目前最小2000
|
||||
export JDJOY_APPLYJDBEAN=""
|
||||
```
|
||||
|
||||
```
|
||||
## 15、疯狂的JOY购买joy等级。
|
||||
export BUY_JOY_LEVEL=""
|
||||
```
|
||||
|
||||
```
|
||||
## 16、摇钱树是否卖出金果。true卖出,false不卖出,默认false
|
||||
export MONEY_TREE_SELL_FRUIT=""
|
||||
```
|
||||
|
||||
```
|
||||
## 17、东东工厂心仪商品。
|
||||
export FACTORAY_WANTPRODUCT_NAME=""
|
||||
```
|
||||
|
||||
```
|
||||
## 18、东东工厂控制哪个京东账号不运行此脚本。多个使用&连接
|
||||
export JDFACTORY_FORBID_ACCOUNT=""
|
||||
```
|
||||
|
||||
```
|
||||
## 19、京喜工厂控制哪个京东账号不运行此脚本。多个使用&连接
|
||||
export DREAMFACTORY_FORBID_ACCOUNT=""
|
||||
```
|
||||
|
||||
```
|
||||
## 20、0301脚本是否加购。如加设置true
|
||||
export PURCHASE_SHOPS=""
|
||||
```
|
||||
|
||||
```
|
||||
## 21、京喜工厂拼团瓜分电力活动的activeId(当前需抓包替换或去群里求别人分享)
|
||||
export TUAN_ACTIVEID=""
|
||||
```
|
||||
|
||||
|
||||
## 阿道夫部分环境变量
|
||||
|
||||
```
|
||||
## 阿道夫脚本加购开关,填true加购
|
||||
export ADOLF_ADDSKU=""
|
||||
```
|
||||
|
||||
```
|
||||
## 阿道夫脚本入会开关,填true入会
|
||||
export ADOLF_MARTIN=""
|
||||
```
|
||||
|
||||
|
||||
## zoopanda部分环境变量
|
||||
|
||||
```
|
||||
## zoopanda 与粽不同入会
|
||||
export ZOO_OPENCAD="true"
|
||||
```
|
||||
|
||||
```
|
||||
## zoopanda 与粽不同加购
|
||||
export ZOO_ADD2CART="true"
|
||||
```
|
||||
|
||||
|
||||
## 柠檬(胖虎部分环境变量)
|
||||
|
||||
```
|
||||
## 是兄弟就来砍我脚本要参加砍价的商品ID
|
||||
export actId=""
|
||||
```
|
||||
|
||||
```
|
||||
## 是兄弟就来砍我脚本要要参加砍价的邀请码
|
||||
export packetId=""
|
||||
```
|
||||
|
||||
```
|
||||
## 省钱大赢家本期活动ID
|
||||
export redEnvelopeId=""
|
||||
```
|
||||
|
||||
```
|
||||
## 省钱大赢家邀请码
|
||||
export inviter=""
|
||||
```
|
||||
|
||||
|
||||
## 青龙部分环境变量
|
||||
|
||||
```
|
||||
## 1、在运行 ql repo 命令时,是否自动删除失效的脚本与定时任务
|
||||
AutoDelCron="true"
|
||||
```
|
||||
|
||||
```
|
||||
## 2、由于github仓库拉取较慢,所以会默认添加代理前缀,如不需要请移除
|
||||
GithubProxyUrl="https://ghproxy.com/"
|
||||
```
|
||||
|
||||
```
|
||||
## 3、设置定时任务执行的超时时间,默认1h,后缀"s"代表秒(默认值), "m"代表分, "h"代表小时, "d"代表天
|
||||
CommandTimeoutTime="1h"
|
||||
```
|
||||
|
||||
```
|
||||
## 4、设置批量执行任务时的并发数,默认同时执行5个任务
|
||||
MaxConcurrentNum="5"
|
||||
```
|
||||
|
||||
```
|
||||
## 5、在运行 task 命令时,随机延迟启动任务的最大延迟时间。
|
||||
## 如果任务不是必须准点运行的任务,那么给它增加一个随机延迟,由你定义最大延迟时间,单位为秒,如 RandomDelay="300" ,表示任务将在 1-300 秒内随机延迟一个秒数,然后再运行
|
||||
RandomDelay="300"
|
||||
```
|
||||
|
||||
```
|
||||
## 6、如果你自己会写shell脚本,并且希望在每次运行 ql update 命令时,额外运行你的 shell 脚本,请赋值为 "true",默认为true
|
||||
EnableExtraShell="true"
|
||||
```
|
||||
|
||||
```
|
||||
## 7、自动按顺序进行账号间互助(选填) 设置为 true 时,将直接导入code最新日志来进行互助
|
||||
AutoHelpOther=""
|
||||
```
|
||||
|
||||
```
|
||||
## 8、定义 jcode 脚本导出的互助码模板样式(选填)
|
||||
## 不填 使用“按编号顺序助力模板”,Cookie编号在前的优先助力
|
||||
## 填 0 使用“全部一致助力模板”,所有账户要助力的码全部一致
|
||||
## 填 1 使用“均等机会助力模板”,所有账户获得助力次数一致
|
||||
## 填 2 使用“随机顺序助力模板”,本套脚本内账号间随机顺序助力,每次生成的顺序都不一致。
|
||||
HelpType=""
|
||||
```
|
||||
|
||||
```
|
||||
## 9、是否自动启动bot,默认不启动,设置为true时自动启动,目前需要自行克隆bot仓库所需代码,存到ql/repo目录下,文件夹命名为dockerbot
|
||||
AutoStartBot=""
|
||||
```
|
||||
|
||||
```
|
||||
## 10、安装bot依赖时指定pip源,默认使用清华源,如不需要源,设置此参数为空
|
||||
PipMirror="https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||
```
|
||||
150
Conf/Vtop/PushBoxjsCookie_elecV2p.js
Normal file
@ -0,0 +1,150 @@
|
||||
const $=new Env('elecv2pCk')
|
||||
const v2purl=$.getval('v2purl');const v2ptoken=$.getval('v2token');$.KEY_usercfgs='chavy_boxjs_userCfgs'
|
||||
$.KEY_sessions='chavy_boxjs_sessions'
|
||||
$.KEY_web_cache='chavy_boxjs_web_cache'
|
||||
$.KEY_app_subCaches='chavy_boxjs_app_subCaches'
|
||||
$.KEY_globalBaks='chavy_boxjs_globalBaks'
|
||||
$.KEY_backups='chavy_boxjs_backups'
|
||||
$.KEY_cursessions='chavy_boxjs_cur_sessions'
|
||||
!(async()=>{console.log("\n* Author:CenBoMin\n* Github:github.com/CenBoMin/GithubSync\n* Telegram:https://t.me/CbScript\n* Updatetime:2021.05.12\n");console.log(`Now login(UTC+8):${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toLocaleString()}`)
|
||||
$.log(`\n🤖[${$.name}]:开始加载BOXJS资讯...`)
|
||||
const datas={}
|
||||
const usercfgs=getUserCfgs()
|
||||
const sessions=getAppSessions()
|
||||
const curSessions=getCurSessions()
|
||||
const sysapps=getSystemApps()
|
||||
const syscfgs=getSystemCfgs()
|
||||
const appSubCaches=getAppSubCaches()
|
||||
const globalbaks=getGlobalBaks()
|
||||
sysapps.forEach((app)=>Object.assign(datas,getAppDatas(app)))
|
||||
usercfgs.appsubs.forEach((sub)=>{const subcache=appSubCaches[sub.url]
|
||||
if(subcache&&subcache.apps&&Array.isArray(subcache.apps)){subcache.apps.forEach((app)=>Object.assign(datas,getAppDatas(app)))}})
|
||||
const box={datas,usercfgs,sessions,curSessions,sysapps,syscfgs,appSubCaches,globalbaks}
|
||||
var ckobj=box.datas
|
||||
$.log(`▪️检测到BOXJS共有${Object.keys(ckobj).length}个cookie`)
|
||||
console.log(`\n🤖[${$.name}]:~ System💲/删除 Cookie空值的Key`)
|
||||
Object.keys(ckobj).forEach((key)=>(ckobj[key]===null||ckobj[key]===undefined||ckobj[key]==='null'||ckobj[key]==='undefined'||ckobj[key]===''||JSON.stringify(ckobj[key])=="{}")&&delete ckobj[key]);var cklist=Object.keys(ckobj);$.log(`▪️处理过后,BOXJS共有${cklist.length}个cookie`)
|
||||
console.log(`\n🤖[${$.name}]:~ System💲/p上传 Cookie到elecv2p服务器`)
|
||||
for(let i=0;i<cklist.length;i++){ckkey=cklist[i];ckvalue=$.getval(ckkey);console.log(`\n💡开始上传cookie:[${ckkey}]`);await pushcookie(ckkey,ckvalue);}})().catch((e)=>{$.log('',`❌ ${$.name}, 失败! 原因: ${e}!`,'')}).finally(()=>{$.done();})
|
||||
async function pushcookie(ckkey,ckvalue){return new Promise((resolve)=>{let url={url:`${v2purl}/webhook`,body:JSON.stringify({token:`${v2ptoken}`,type:'store',op:'put',key:ckkey,value:ckvalue}),headers:{'Content-Type':'application/json'},method:'put'};$.post(url,async(err,resp,data)=>{try{if(err){console.log("⛔️API查询请求失败❌ ‼️‼️");console.log(JSON.stringify(err));$.logErr(err);}else{$.log(data)}}catch(e){$.logErr(e,resp);}finally{resolve();}});});}
|
||||
function getSystemCfgs(){return{env:$.isShadowrocket()?'Shadowrocket':$.isLoon()?'Loon':$.isQuanX()?'QuanX':$.isSurge()?'Surge':'Node',version:$.version,versionType:$.versionType,envs:[{id:'Surge',icons:['https://raw.githubusercontent.com/Orz-3/mini/none/surge.png','https://raw.githubusercontent.com/Orz-3/mini/master/Color/surge.png']},{id:'QuanX',icons:['https://raw.githubusercontent.com/Orz-3/mini/none/quanX.png','https://raw.githubusercontent.com/Orz-3/mini/master/Color/quantumultx.png']},{id:'Loon',icons:['https://raw.githubusercontent.com/Orz-3/mini/none/loon.png','https://raw.githubusercontent.com/Orz-3/mini/master/Color/loon.png']},{id:'Shadowrocket',icons:['https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/shadowrocket.png','https://raw.githubusercontent.com/Orz-3/mini/master/Color/shadowrocket.png']}],chavy:{id:'ChavyLeung',icon:'https://avatars3.githubusercontent.com/u/29748519',repo:'https://github.com/chavyleung/scripts'},senku:{id:'GideonSenku',icon:'https://avatars1.githubusercontent.com/u/39037656',repo:'https://github.com/GideonSenku'},id77:{id:'id77',icon:'https://avatars0.githubusercontent.com/u/9592236',repo:'https://github.com/id77'},orz3:{id:'Orz-3',icon:'https://raw.githubusercontent.com/Orz-3/mini/master/Color/Orz-3.png',repo:'https://github.com/Orz-3/'},boxjs:{id:'BoxJs',show:false,icon:'https://raw.githubusercontent.com/Orz-3/mini/master/Color/box.png',icons:['https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/box.png','https://raw.githubusercontent.com/Orz-3/mini/master/Color/box.png'],repo:'https://github.com/chavyleung/scripts'},defaultIcons:['https://raw.githubusercontent.com/Orz-3/mini/master/Alpha/appstore.png','https://raw.githubusercontent.com/Orz-3/mini/master/Color/appstore.png']}}
|
||||
function getSystemApps(){const sysapps=[{id:'BoxSetting',name:'偏好设置',descs:['可手动执行一些抹掉数据的脚本','可设置明暗两种主题下的主色调','可设置壁纸清单'],keys:['@chavy_boxjs_userCfgs.httpapi','@chavy_boxjs_userCfgs.bgimg','@chavy_boxjs_userCfgs.http_backend','@chavy_boxjs_userCfgs.color_dark_primary','@chavy_boxjs_userCfgs.color_light_primary'],settings:[{id:'@chavy_boxjs_userCfgs.httpapis',name:'HTTP-API (Surge)',val:'',type:'textarea',placeholder:',examplekey@127.0.0.1:6166',autoGrow:true,rows:2,persistentHint:true,desc:'示例: ,examplekey@127.0.0.1:6166! 注意: 以逗号开头, 逗号分隔多个地址, 可加回车'},{id:'@chavy_boxjs_userCfgs.httpapi_timeout',name:'HTTP-API Timeout (Surge)',val:20,type:'number',persistentHint:true,desc:'如果脚本作者指定了超时时间, 会优先使用脚本指定的超时时间.'},{id:'@chavy_boxjs_userCfgs.http_backend',name:'HTTP Backend (Quantumult X)',val:'',type:'text',placeholder:'http://127.0.0.1:9999',persistentHint:true,desc:'示例: http://127.0.0.1:9999 ! 注意: 必须是以 http 开头的完整路径, 不能是 / 结尾'},{id:'@chavy_boxjs_userCfgs.bgimgs',name:'背景图片清单',val:'无,\n跟随系统,跟随系统\nlight,http://api.btstu.cn/sjbz/zsy.php\ndark,https://uploadbeta.com/api/pictures/random\n妹子,http://api.btstu.cn/sjbz/zsy.php',type:'textarea',placeholder:'无,{回车} 跟随系统,跟随系统{回车} light,图片地址{回车} dark,图片地址{回车} 妹子,图片地址',persistentHint:true,autoGrow:true,rows:2,desc:'逗号分隔名字和链接, 回车分隔多个地址'},{id:'@chavy_boxjs_userCfgs.bgimg',name:'背景图片',val:'',type:'text',placeholder:'http://api.btstu.cn/sjbz/zsy.php',persistentHint:true,desc:'输入背景图标的在线链接'},{id:'@chavy_boxjs_userCfgs.changeBgImgEnterDefault',name:'手势进入壁纸模式默认背景图片',val:'',type:'text',placeholder:'填写上面背景图片清单的值',persistentHint:true,desc:''},{id:'@chavy_boxjs_userCfgs.changeBgImgOutDefault',name:'手势退出壁纸模式默认背景图片',val:'',type:'text',placeholder:'填写上面背景图片清单的值',persistentHint:true,desc:''},{id:'@chavy_boxjs_userCfgs.color_light_primary',name:'明亮色调',canvas:true,val:'#F7BB0E',type:'colorpicker',desc:''},{id:'@chavy_boxjs_userCfgs.color_dark_primary',name:'暗黑色调',canvas:true,val:'#2196F3',type:'colorpicker',desc:''}],scripts:[{name:"抹掉:所有缓存",script:"https://raw.githubusercontent.com/chavyleung/scripts/master/box/scripts/boxjs.revert.caches.js"},{name:"抹掉:收藏应用",script:"https://raw.githubusercontent.com/chavyleung/scripts/master/box/scripts/boxjs.revert.usercfgs.favapps.js"},{name:"抹掉:用户偏好",script:"https://raw.githubusercontent.com/chavyleung/scripts/master/box/scripts/boxjs.revert.usercfgs.js"},{name:"抹掉:所有会话",script:"https://raw.githubusercontent.com/chavyleung/scripts/master/box/scripts/boxjs.revert.usercfgs.sessions.js"},{name:"抹掉:所有备份",script:"https://raw.githubusercontent.com/chavyleung/scripts/master/box/scripts/boxjs.revert.baks.js"},{name:"抹掉:BoxJs (注意备份)",script:"https://raw.githubusercontent.com/chavyleung/scripts/master/box/scripts/boxjs.revert.boxjs.js"}],author:'@chavyleung',repo:'https://github.com/chavyleung/scripts/blob/master/box/switcher/box.switcher.js',icons:['https://raw.githubusercontent.com/chavyleung/scripts/master/box/icons/BoxSetting.mini.png','https://raw.githubusercontent.com/chavyleung/scripts/master/box/icons/BoxSetting.png']},{id:'BoxSwitcher',name:'会话切换',desc:'打开静默运行后, 切换会话将不再发出系统通知 \n注: 不影响日志记录',keys:[],settings:[{id:'CFG_BoxSwitcher_isSilent',name:'静默运行',val:false,type:'boolean',desc:'切换会话时不发出系统通知!'}],author:'@chavyleung',repo:'https://github.com/chavyleung/scripts/blob/master/box/switcher/box.switcher.js',icons:['https://raw.githubusercontent.com/chavyleung/scripts/master/box/icons/BoxSwitcher.mini.png','https://raw.githubusercontent.com/chavyleung/scripts/master/box/icons/BoxSwitcher.png'],script:'https://raw.githubusercontent.com/chavyleung/scripts/master/box/switcher/box.switcher.js'}]
|
||||
return sysapps}
|
||||
function getUserCfgs(){const defcfgs={favapps:[],appsubs:[],viewkeys:[],isPinedSearchBar:true,httpapi:'examplekey@127.0.0.1:6166',http_backend:''}
|
||||
const usercfgs=Object.assign(defcfgs,$.getjson($.KEY_usercfgs,{}))
|
||||
if(usercfgs.appsubs.includes(null)){usercfgs.appsubs=usercfgs.appsubs.filter((sub)=>sub)
|
||||
$.setjson(usercfgs,$.KEY_usercfgs)}
|
||||
return usercfgs}
|
||||
function getAppSubCaches(){return $.getjson($.KEY_app_subCaches,{})}
|
||||
function getGlobalBaks(){let backups=$.getjson($.KEY_backups,[])
|
||||
if(backups.includes(null)){backups=backups.filter((bak)=>bak)
|
||||
$.setjson(backups,$.KEY_backups)}
|
||||
return backups}
|
||||
function getVersions(){return $.http.get($.ver).then((resp)=>{try{$.json=$.toObj(resp.body)}catch{$.json={}}},()=>($.json={}))}
|
||||
function getUserApps(){return[]}
|
||||
function getAppSessions(){return $.getjson($.KEY_sessions,[])}
|
||||
function getCurSessions(){return $.getjson($.KEY_cursessions,{})}
|
||||
function getAppDatas(app){const datas={}
|
||||
const nulls=[null,undefined,'null','undefined']
|
||||
if(app.keys&&Array.isArray(app.keys)){app.keys.forEach((key)=>{const val=$.getdata(key)
|
||||
datas[key]=nulls.includes(val)?null:val})}
|
||||
if(app.settings&&Array.isArray(app.settings)){app.settings.forEach((setting)=>{const key=setting.id
|
||||
const val=$.getdata(key)
|
||||
datas[key]=nulls.includes(val)?null:val})}
|
||||
return datas}
|
||||
async function apiSave(){const data=$.toObj($request.body)
|
||||
if(Array.isArray(data)){data.forEach((dat)=>$.setdata(dat.val,dat.key))}else{$.setdata(data.val,data.key)}
|
||||
$.json=getBoxData()}
|
||||
async function apiAddAppSub(){const sub=$.toObj($request.body)
|
||||
const usercfgs=getUserCfgs()
|
||||
usercfgs.appsubs.push(sub)
|
||||
$.setjson(usercfgs,$.KEY_usercfgs)
|
||||
await reloadAppSubCache(sub.url)
|
||||
$.json=getBoxData()}
|
||||
async function apiReloadAppSub(){const sub=$.toObj($request.body)
|
||||
if(sub){await reloadAppSubCache(sub.url)}else{await reloadAppSubCaches()}
|
||||
$.json=getBoxData()}
|
||||
async function apiDelGlobalBak(){const backup=$.toObj($request.body)
|
||||
const backups=$.getjson($.KEY_backups,[])
|
||||
const bakIdx=backups.findIndex((b)=>b.id===backup.id)
|
||||
if(bakIdx>-1){backups.splice(bakIdx,1)
|
||||
$.setdata('',backup.id)
|
||||
$.setjson(backups,$.KEY_backups)}
|
||||
$.json=getBoxData()}
|
||||
async function apiUpdateGlobalBak(){const{id:backupId,name:backupName}=$.toObj($request.body)
|
||||
const backups=$.getjson($.KEY_backups,[])
|
||||
const backup=backups.find((b)=>b.id===backupId)
|
||||
if(backup){backup.name=backupName
|
||||
$.setjson(backups,$.KEY_backups)}
|
||||
$.json=getBoxData()}
|
||||
async function apiRevertGlobalBak(){const{id:bakcupId}=$.toObj($request.body)
|
||||
const backup=$.getjson(bakcupId)
|
||||
if(backup){const{chavy_boxjs_sysCfgs,chavy_boxjs_sysApps,chavy_boxjs_sessions,chavy_boxjs_userCfgs,chavy_boxjs_cur_sessions,chavy_boxjs_app_subCaches,...datas}=backup
|
||||
$.setdata(JSON.stringify(chavy_boxjs_sessions),$.KEY_sessions)
|
||||
$.setdata(JSON.stringify(chavy_boxjs_userCfgs),$.KEY_usercfgs)
|
||||
$.setdata(JSON.stringify(chavy_boxjs_cur_sessions),$.KEY_cursessions)
|
||||
$.setdata(JSON.stringify(chavy_boxjs_app_subCaches),$.KEY_app_subCaches)
|
||||
const isNull=(val)=>[undefined,null,'null','undefined',''].includes(val)
|
||||
Object.keys(datas).forEach((datkey)=>$.setdata(isNull(datas[datkey])?'':`${datas[datkey]}`,datkey))}
|
||||
const boxdata=getBoxData()
|
||||
$.json=boxdata}
|
||||
async function apiSaveGlobalBak(){const backups=$.getjson($.KEY_backups,[])
|
||||
const boxdata=getBoxData()
|
||||
const backup=$.toObj($request.body)
|
||||
const backupData={}
|
||||
backupData['chavy_boxjs_userCfgs']=boxdata.usercfgs
|
||||
backupData['chavy_boxjs_sessions']=boxdata.sessions
|
||||
backupData['chavy_boxjs_cur_sessions']=boxdata.curSessions
|
||||
backupData['chavy_boxjs_app_subCaches']=boxdata.appSubCaches
|
||||
Object.assign(backupData,boxdata.datas)
|
||||
backups.push(backup)
|
||||
$.setjson(backups,$.KEY_backups)
|
||||
$.setjson(backupData,backup.id)
|
||||
$.json=getBoxData()}
|
||||
async function apiImpGlobalBak(){const backups=$.getjson($.KEY_backups,[])
|
||||
const backup=$.toObj($request.body)
|
||||
const backupData=backup.bak
|
||||
delete backup.bak
|
||||
backups.push(backup)
|
||||
$.setjson(backups,$.KEY_backups)
|
||||
$.setjson(backupData,backup.id)
|
||||
$.json=getBoxData()}
|
||||
function safeGet(data){try{if(typeof JSON.parse(data)=="object"){return true;}}catch(e){console.log(e);console.log(`⛔️服务器访问数据为空,请检查自身设备网络情况`);return false;}}
|
||||
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}
|
||||
isShadowrocket(){return"undefined"!=typeof $rocket}
|
||||
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();s&&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=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";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[s](t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method=s,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:i,...r}=t;this.got[s](i,r).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,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).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}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}
|
||||
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)}
|
||||
852
Conf/Vtop/TGbotonCFworker2.0.js
Normal file
@ -0,0 +1,852 @@
|
||||
/**
|
||||
* 功能: 部署在 cloudflare worker 的 TGbot 后台代码,用于通过 telegram 查看/控制 elecV2P
|
||||
* 地址: https://github.com/elecV2/elecV2P-dei/blob/master/examples/TGbotonCFworker2.0.js
|
||||
* 更新: 2021-05-26
|
||||
* 说明: 功能实现主要基于 elecV2P 的 webhook(https://github.com/elecV2/elecV2P-dei/tree/master/docs/09-webhook.md)
|
||||
*
|
||||
* 使用方式:
|
||||
* 1. 准备工作
|
||||
* - elecV2P 服务器配置域名访问(测试: http://你的 elecV2P 服务器地址/webhook?token=你的webhook token&type=status )
|
||||
* - 注册并登录 https://dash.cloudflare.com/ ,创建一个 workers 和 KV Namespace(建议命名: elecV2P),并进行绑定
|
||||
* - 在 https://t.me/botfather 申请一个 TG BOT,记下 api token
|
||||
*
|
||||
* 2. 部署代码
|
||||
* - 根据下面代码中 CONFIG_EV2P 的注释,填写好相关内容
|
||||
* - 然后把修改后的整个 JS 内容粘贴到 cloudflare worker 代码框,保存并部署。得到一个类似 https://xx.xxxxx.workers.dev 的网址
|
||||
* - 接着在浏览器中打开链接: https://api.telegram.org/bot(你的 tgbot token)/setWebhook?url=https://xx.xxxxx.workers.dev (连接 TGbot 和 CFworkers)
|
||||
* - 最后,打开 TGbot 对话框,输入下面的相关指令(比如 status),测试 TGbot 是否部署成功
|
||||
*
|
||||
* 2.0 更新: 添加上下文执行环境
|
||||
* - /runjs 进入脚本执行环境,接下来直接输入文件名或远程链接则可直接运行
|
||||
* - /task 进入任务操作环境,获取相关任务的 taskid 可暂停/开始/添加定时任务
|
||||
* - /shell 进入 shell 执行环境,默认 timeout 为 3000ms(elecV2P v3.2.4 版本后生效)
|
||||
* - /log 进入 日志查看模式
|
||||
* - /store 进入 store/cookie 管理模式。默认处于关闭状态,可在 CONFIG_EV2P mode 设置开启
|
||||
* - /context 获取当前执行环境,如果没有,则为普通模式
|
||||
* 其它模式完善中...
|
||||
*
|
||||
* 特殊指令 sudo clear ; 用于清空当前 context 值(以防出现服务器长时间无返回而卡死的问题)
|
||||
*
|
||||
* 下面 /command 命令的优先级高于当前执行环境
|
||||
*
|
||||
* 实现功能及相关指令:
|
||||
* 查看 elecV2P 运行状态
|
||||
* status === /status ;任何包含 status 关键字的指令
|
||||
*
|
||||
* 查看服务器相关信息(elecV2P v3.2.6 版本后适用)
|
||||
* /info
|
||||
* /info debug
|
||||
*
|
||||
* 删除 log 文件
|
||||
* /deletelog file === /deletelog file.js.log === /dellog file
|
||||
* /dellog all ;删除使用 log 文件
|
||||
*
|
||||
* 查看 log 文件
|
||||
* /log file
|
||||
*
|
||||
* 定时任务相关
|
||||
* /taskinfo all ;获取所有任务信息
|
||||
* /taskinfo taskid ;获取单个任务信息
|
||||
* /taskstart taskid ;开始任务
|
||||
* /taskstop taskid ;停止任务
|
||||
* /taskdel taskid ;删除任务
|
||||
* /tasksave ;保存当前任务列表
|
||||
*
|
||||
* 脚本相关
|
||||
* /runjs file.js ;运行脚本
|
||||
* /runjs https://raw.githubusercontent.com/elecV2/elecV2P/master/script/JSFile/webhook.js
|
||||
* /runjs https://raw.githubusercontent.com/elecV2/elecV2P/master/script/JSFile/feed.js anotify.js ;运行远程脚本同时重命名保存为 anotify.js
|
||||
* /deljs file.js ;删除脚本
|
||||
*
|
||||
* shell 指令相关
|
||||
* /exec ls === /shell ls === exec ls
|
||||
* exec pm2 ls
|
||||
*
|
||||
* bot commands 2.0
|
||||
runjs - 运行 JS
|
||||
task - 开始暂停任务
|
||||
status - 内存使用状态
|
||||
shell - 执行简单 shell 指令
|
||||
store - store/cookie 管理
|
||||
end - 退出当前执行环境
|
||||
tasksave - 保存任务列表
|
||||
taskdel - 删除任务
|
||||
deljs - 删除 JS
|
||||
dellog - 删除日志
|
||||
log - 获取日志
|
||||
context - 查看当前执行模式
|
||||
info - 查看服务器信息
|
||||
command - 列出所有指令
|
||||
|
||||
* 更新方式:
|
||||
* - 如果在 CONFIG_EV2P 中设置了 store,直接复制当前整个文件到 cf worker 即可
|
||||
* - 如果没有设置 store,则复制除了开头的 CONFIG_EV2P 外其他所有内容到 cf worker
|
||||
*
|
||||
* 适用版本: elecV2P v3.3.6 (低版本下部分指令可能无法正常处理)
|
||||
**/
|
||||
|
||||
const kvname = elecV2P // 保存上下文内容的 kv namespace。在 cf 上创建并绑定后自行更改
|
||||
|
||||
let CONFIG_EV2P = {
|
||||
name: 'elecV2P', // bot 名称。可省略
|
||||
store: 'elecV2PBot_CONFIG', // 是否将当前 CONFIG 设置保存到 kv 库(运行时会自动读取并覆盖下面的设置,即下面的设置更改无效(方便更新)。建议调试时留空,调试完成后再设置回 'elecV2PBot_CONFIG' )
|
||||
storeforce: false, // true: 使用当前设置强制覆盖 cf kv 库中的数据,false: kv 库中有配置相关数据则读取,没有则使用当前设置运行并保存
|
||||
url: "http://你的 elecV2P 服务器地址/", // elecV2P 服务器地址(必须是域名,cf worker 不支持 IP 直接访问)
|
||||
wbrtoken: 'xxxxxx-xxxxxxxxxxxx-xxxx', // elecV2P 服务器 webhook token(在 webUI->SETTING 界面查看)
|
||||
token: "xxxxxxxx:xxxxxxxxxxxxxxxxxxx", // telegram bot api token
|
||||
userid: [], // 只对该列表中的 userid 发出的指令进行回应。默认: 回应所有用户的指令(高风险!)
|
||||
slice: -1200, // 截取部分返回结果的最后 1200 个字符,以防太长无法传输(可自行修改)
|
||||
shell: {
|
||||
timeout: 1000*6, // shell exec 超时时间,单位: ms
|
||||
contexttimeout: 1000*60*5, // shell 模式自动退出时间,单位: ms
|
||||
},
|
||||
timeout: 5000, // runjs 请求超时时间,以防脚本运行时间过长,无回应导致反复请求,bot 被卡死
|
||||
mycommand: { // 自定义快捷命令,比如 restart: 'exec pm2 restart elecV2P'
|
||||
rtest: '/runjs test.js', // 表示当输入命令 /rtest 或 rtest 时会自动替换成命令 '/runjs test.js' 运行 JS 脚本 test.js
|
||||
execls: 'exec ls -al', // 同上,表示自动将命令 /execls 替换成 exec ls -al。 其他命令可参考自行添加
|
||||
update: { // 当为 object 类型时,note 表示备注显示信息, command 表示实际执行命令
|
||||
note: '软更新升级',
|
||||
command: 'runjs https://raw.githubusercontent.com/elecV2/elecV2P/master/script/JSFile/softupdate.js'
|
||||
}
|
||||
},
|
||||
mode: {
|
||||
storemanage: false, // 是否开启 store/cookie 管理模式。false: 不开启(默认),true: 开启
|
||||
}
|
||||
}
|
||||
|
||||
/************ 后面部分为主运行代码,若没有特殊情况,无需改动 ****************/
|
||||
|
||||
const store = {
|
||||
put: async (key, value)=>{
|
||||
return await kvname.put(key, value)
|
||||
},
|
||||
get: async (key, type)=>{
|
||||
return await kvname.get(key, type)
|
||||
},
|
||||
delete: async (key)=>{
|
||||
await kvname.delete(key)
|
||||
},
|
||||
list: async ()=>{
|
||||
const val = await kvname.list()
|
||||
return val.keys
|
||||
}
|
||||
}
|
||||
|
||||
const context = {
|
||||
get: async (uid) => {
|
||||
return await store.get(uid, 'json')
|
||||
},
|
||||
put: async (uid, uenv, command) => {
|
||||
let ctx = await context.get(uid)
|
||||
if (ctx === null || typeof ctx !== 'object') {
|
||||
ctx = {
|
||||
command: []
|
||||
}
|
||||
}
|
||||
if (uenv) {
|
||||
ctx.context = uenv
|
||||
}
|
||||
if (command) {
|
||||
ctx.command ? ctx.command.push(command) : ctx.command = [command]
|
||||
}
|
||||
ctx.active = Date.now()
|
||||
await store.put(uid, JSON.stringify(ctx))
|
||||
},
|
||||
run: async (uid, target) => {
|
||||
const ctx = await context.get(uid)
|
||||
},
|
||||
end: async (uid) => {
|
||||
await store.put(uid, JSON.stringify({}))
|
||||
}
|
||||
}
|
||||
|
||||
function surlName(url) {
|
||||
if (!url) {
|
||||
return ''
|
||||
}
|
||||
let name = ''
|
||||
let sdurl = url.split(/\/|\?|#/)
|
||||
while (name === '' && sdurl.length) {
|
||||
name = sdurl.pop()
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
function timeoutPromise({ timeout = CONFIG_EV2P.timeout || 5000, fn }) {
|
||||
return new Promise(resolve => setTimeout(resolve, timeout, '请求超时 ' + timeout + ' ms,相关请求应该已发送至 elecV2P,这里提前返回结果,以免发送重复请求' + `${fn ? ('\n\n运行日志: ' + CONFIG_EV2P.url + 'logs/' + surlName(fn) + '.log') : '' }`))
|
||||
}
|
||||
|
||||
function getLogs(s){
|
||||
if (s !== 'all' && !/\.log$/.test(s)) {
|
||||
s = s + '.js.log'
|
||||
}
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=getlog&fn=' + s).then(res=>res.text()).then(r=>{
|
||||
resolve(s === 'all' ? r : r.slice(CONFIG_EV2P.slice))
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function delLogs(logn) {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=deletelog&fn=' + logn).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getStatus() {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?type=status&token=' + CONFIG_EV2P.wbrtoken).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getInfo(debug) {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?type=info&token=' + CONFIG_EV2P.wbrtoken + (debug ? '&debug=true' : '')).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getTaskinfo(tid) {
|
||||
tid = tid.replace(/^\//, '')
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=taskinfo&tid=' + tid).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function opTask(tid, op) {
|
||||
if (!/start|stop|del|delete/.test(op)) {
|
||||
return 'unknow operation' + op
|
||||
}
|
||||
tid = tid.replace(/^\//, '')
|
||||
if (/^\/?stop/.test(tid)) {
|
||||
op = 'stop'
|
||||
tid = tid.replace(/^\/?stop/, '')
|
||||
}
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=task' + op + '&tid=' + tid).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function saveTask() {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=tasksave').then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function taskNew(taskinfo) {
|
||||
// 新建任务
|
||||
if (!taskinfo) {
|
||||
return '没有任何任务信息'
|
||||
}
|
||||
let finfo = taskinfo.split(/\r|\n/)
|
||||
if (finfo.length < 2) {
|
||||
return '任务信息输入有误 '
|
||||
}
|
||||
taskinfo = {
|
||||
name: finfo[2] || '新的任务' + Math.ceil(Math.random()*100),
|
||||
type: finfo[0].split(' ').length > 4 ? 'cron' : 'schedule',
|
||||
time: finfo[0],
|
||||
job: {
|
||||
type: finfo[3] || 'runjs',
|
||||
target: finfo[1],
|
||||
},
|
||||
running: finfo[4] !== 'false'
|
||||
}
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
token: CONFIG_EV2P.wbrtoken,
|
||||
type: 'taskadd',
|
||||
task: taskinfo
|
||||
})
|
||||
}).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function jsRun(fn, rename) {
|
||||
let rfn = fn.split(/ +/)
|
||||
if (rfn.length !== 1) {
|
||||
fn = rfn[0]
|
||||
rename = rfn[1]
|
||||
}
|
||||
|
||||
return Promise.race([new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=runjs&fn=' + fn + (rename ? '&rename=' + rename : '')).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
}), timeoutPromise({ fn })])
|
||||
}
|
||||
|
||||
function getJsLists() {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=jslist').then(res=>res.json()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function deleteJS(name) {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=deletejs&fn=' + name).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function shellRun(command) {
|
||||
if (command) {
|
||||
command = encodeURI(command)
|
||||
} else {
|
||||
return '请输入 command 指令,比如: ls'
|
||||
}
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + `&type=shell&timeout=${CONFIG_EV2P.shell && CONFIG_EV2P.shell.timeout || 3000}&command=` + command).then(res=>res.text()).then(r=>{
|
||||
resolve(r.slice(CONFIG_EV2P.slice))
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function storeManage(keyvt) {
|
||||
if (!keyvt) {
|
||||
return '请输入要获取的 cookie/store 相关的 key 值'
|
||||
}
|
||||
|
||||
let keys = keyvt.split(' ')
|
||||
if (keys.length === 1) {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + `&type=store&key=${keyvt}`).then(res=>res.text()).then(r=>{
|
||||
if (r) {
|
||||
resolve(r.slice(CONFIG_EV2P.slice))
|
||||
} else {
|
||||
resolve(keyvt + ' 暂不存在')
|
||||
}
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
} else {
|
||||
let body = {
|
||||
token: CONFIG_EV2P.wbrtoken,
|
||||
type: 'store'
|
||||
}
|
||||
if (keys[0] === 'delete') {
|
||||
body.op = 'delete'
|
||||
body.key = keys[1]
|
||||
} else {
|
||||
body.op = 'put'
|
||||
body.key = keys[0]
|
||||
body.value = decodeURI(keys[1])
|
||||
body.options = {
|
||||
type: keys[2]
|
||||
}
|
||||
}
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook', {
|
||||
method: 'PUT',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(body)
|
||||
}).then(res=>res.text()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function storeList() {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(CONFIG_EV2P.url + 'webhook?token=' + CONFIG_EV2P.wbrtoken + '&type=store&op=all').then(res=>res.json()).then(r=>{
|
||||
resolve(r)
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getFile(file_id) {
|
||||
return new Promise((resolve,reject)=>{
|
||||
fetch(`https://api.telegram.org/bot${CONFIG_EV2P.token}/getFile?file_id=${file_id}`).then(res=>res.json()).then(r=>{
|
||||
if (r.ok) {
|
||||
resolve(`https://api.telegram.org/file/bot${CONFIG_EV2P.token}/${r.result.file_path}`)
|
||||
} else {
|
||||
resolve(r.description)
|
||||
}
|
||||
}).catch(e=>{
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function handlePostRequest(request) {
|
||||
if (CONFIG_EV2P.store) {
|
||||
let config = await store.get(CONFIG_EV2P.store, 'json')
|
||||
if (!CONFIG_EV2P.storeforce && config) {
|
||||
Object.assign(CONFIG_EV2P, config)
|
||||
} else {
|
||||
await store.put(CONFIG_EV2P.store, JSON.stringify(CONFIG_EV2P))
|
||||
}
|
||||
}
|
||||
if (!CONFIG_EV2P.url.endsWith('/')) {
|
||||
CONFIG_EV2P.url = CONFIG_EV2P.url + '/'
|
||||
}
|
||||
CONFIG_EV2P.timeout = CONFIG_EV2P.timeout || 5000
|
||||
|
||||
let bodyString = await readRequestBody(request)
|
||||
let payload = {
|
||||
"method": "sendMessage",
|
||||
"chat_id": CONFIG_EV2P.userid[0],
|
||||
"parse_mode": "html",
|
||||
"disable_web_page_preview": true,
|
||||
}
|
||||
|
||||
try {
|
||||
let body = JSON.parse(bodyString)
|
||||
if (!body.message) {
|
||||
payload.text = 'elecV2P bot get unknow message:\n' + bodyString
|
||||
await tgPush(payload)
|
||||
return new Response("OK")
|
||||
}
|
||||
payload["chat_id"] = body.message.chat.id
|
||||
if (body.message.document) {
|
||||
let bodydoc = body.message.document
|
||||
payload.text = `文件名称: ${bodydoc.file_name}\n文件类型: ${bodydoc.mime_type}\n文件 id: ${bodydoc.file_id}\n`
|
||||
let fpath = await getFile(bodydoc.file_id)
|
||||
payload.text += `文件地址: ${fpath}\n\n(进一步功能待完成)`
|
||||
await tgPush(payload)
|
||||
return new Response("OK")
|
||||
}
|
||||
if (body.message.text) {
|
||||
let bodytext = body.message.text.trim()
|
||||
let uid = 'u' + payload['chat_id']
|
||||
|
||||
if (CONFIG_EV2P.mycommand && Object.keys(CONFIG_EV2P.mycommand).length) {
|
||||
let tcom = bodytext.replace(/^\//, '')
|
||||
if (CONFIG_EV2P.mycommand[tcom]) {
|
||||
bodytext = CONFIG_EV2P.mycommand[tcom].command || CONFIG_EV2P.mycommand[tcom]
|
||||
}
|
||||
}
|
||||
if (bodytext === 'sudo clear') {
|
||||
await store.delete(uid)
|
||||
payload.text = 'current context is cleared.'
|
||||
tgPush(payload)
|
||||
return new Response("OK")
|
||||
} else if (bodytext === '/command') {
|
||||
payload.text = `/runjs - 运行 JS
|
||||
/task - 开始暂停任务
|
||||
/status - 内存使用状态
|
||||
/shell - 执行简单 shell 指令
|
||||
/store - store/cookie 管理
|
||||
/end - end context
|
||||
/tasksave - 保存任务列表
|
||||
/log - 获取日志
|
||||
/context - 查看当前执行模式
|
||||
/info - 查看服务器信息
|
||||
/command - 列出所有指令`
|
||||
|
||||
if (CONFIG_EV2P.mycommand && Object.keys(CONFIG_EV2P.mycommand).length) {
|
||||
payload.text += '\n\n自定义快捷命令'
|
||||
for (let x in CONFIG_EV2P.mycommand) {
|
||||
payload.text += '\n' + (x.startsWith('/') ? '' : '/') + x + ' - ' + (CONFIG_EV2P.mycommand[x].note || CONFIG_EV2P.mycommand[x])
|
||||
}
|
||||
}
|
||||
await tgPush(payload)
|
||||
return new Response("OK")
|
||||
}
|
||||
let userenv = await context.get(uid)
|
||||
|
||||
if (CONFIG_EV2P.userid && CONFIG_EV2P.userid.length && CONFIG_EV2P.userid.indexOf(body.message.chat.id) === -1) {
|
||||
payload.text = "这是 " + CONFIG_EV2P.name + " 私人 bot,不接受其他人的指令。\n如果有兴趣可以自己搭建一个: https://github.com/elecV2/elecV2P-dei\n\n频道: @elecV2 | 交流群: @elecV2G"
|
||||
tgPush({
|
||||
...payload,
|
||||
"chat_id": CONFIG_EV2P.userid[0],
|
||||
"text": `用户: ${body.message.chat.username},ID: ${body.message.chat.id} 正在连接 elecV2P bot,发出指令为: ${bodytext}`
|
||||
})
|
||||
} else if (/^\/?end/.test(bodytext)) {
|
||||
await context.end(uid)
|
||||
payload.text = `退出上文执行环境${(userenv && userenv.context) || ''},回到普通模式`
|
||||
} else if (/^\/?context$/.test(bodytext)) {
|
||||
if (userenv && userenv.context) {
|
||||
payload.text = '当前执行环境为: ' + userenv.context + '\n输入 end 回到普通模式'
|
||||
} else {
|
||||
payload.text = '当前执行环境为: 普通模式'
|
||||
}
|
||||
} else if (/^\/?status/.test(bodytext)) {
|
||||
payload.text = await getStatus()
|
||||
} else if (/^\/?info/.test(bodytext)) {
|
||||
let cont = bodytext.trim().split(' ')
|
||||
if (cont.length === 1) {
|
||||
payload.text = await getInfo()
|
||||
} else if (cont.pop() === 'debug') {
|
||||
payload.text = await getInfo('debug')
|
||||
} else {
|
||||
payload.text = 'unknow info command'
|
||||
}
|
||||
} else if (/^\/?(dellog|deletelog) /.test(bodytext)) {
|
||||
let cont = bodytext.replace(/^\/?(dellog|deletelog) /, '')
|
||||
if (!(cont === 'all' || /\.log$/.test(cont))) cont = cont + '.js.log'
|
||||
payload.text = await delLogs(cont)
|
||||
} else if (/^\/?taskinfo /.test(bodytext)) {
|
||||
let cont = bodytext.replace(/^\/?taskinfo /, '')
|
||||
payload.text = await getTaskinfo(cont)
|
||||
} else if (/^\/?taskstart /.test(bodytext)) {
|
||||
let cont = bodytext.replace(/^\/?taskstart /, '')
|
||||
payload.text = await opTask(cont, 'start')
|
||||
} else if (/^\/?taskstop /.test(bodytext)) {
|
||||
let cont = bodytext.replace(/^\/?taskstop /, '')
|
||||
payload.text = await opTask(cont, 'stop')
|
||||
} else if (/^\/?taskdel /.test(bodytext)) {
|
||||
let cont = bodytext.replace(/^\/?taskdel /, '')
|
||||
payload.text = await opTask(cont, 'del')
|
||||
} else if (/^\/?tasksave/.test(bodytext)) {
|
||||
payload.text = await saveTask()
|
||||
} else if (/^\/?deljs /.test(bodytext)) {
|
||||
let cont = bodytext.replace(/^\/?deljs /, '')
|
||||
payload.text = await deleteJS(cont)
|
||||
} else if (/^\/?task/.test(bodytext)) {
|
||||
let cont = bodytext.trim().split(' ')
|
||||
if (cont.length === 1) {
|
||||
try {
|
||||
await context.put('u' + payload['chat_id'], 'task')
|
||||
let tasklists = await getTaskinfo('all')
|
||||
let tlist = JSON.parse(tasklists)
|
||||
let tlstr = ''
|
||||
for (let tid in tlist.info) {
|
||||
tlstr += `${tlist.info[tid].running ? '🐢' : '🐰'} ${tlist.info[tid].name} /${tid} | /stop${tid}\n`
|
||||
}
|
||||
tlstr += `共 ${tlist.total} 个定时任务,运行中(🐢)的任务 ${tlist.running} 个`
|
||||
|
||||
payload.text = `当前 elecV2P 任务列表如下:\n${tlstr}\n点击任务名后面的 /+tid 开始任务,/+stoptid 停止任务\n也可以手动输入对应的 tid 开始任务, stop tid 停止任务\ntaskinfo tid 查看任务信息`
|
||||
await tgPush(payload)
|
||||
|
||||
payload.text = `按照下面格式多行输入可直接添加新的任务(每行表示一个任务参数)\n
|
||||
任务时间(cron 定时,比如: 8 0,8 * * * ,倒计时,比如: 1 10 6)
|
||||
任务目标(test.js,node -v, LOlxkcdI(某个任务的 tid),远程 JS 链接等)
|
||||
任务名称(可省略,默认为 新的任务+随机参数)
|
||||
任务类型(可省略,默认为 运行 JS,shell: 运行 shell 指令,taskstart:开始其他任务,taskstop:停止其他任务)
|
||||
是否执行(可省略,默认为 true,当且仅当该值为 false 时,表示只添加任务信息而不运行)
|
||||
|
||||
示例一:添加一个 cron 定时任务
|
||||
|
||||
30 20 * * *
|
||||
https://raw.githubusercontent.com/elecV2/elecV2P/master/script/JSFile/deletelog.js
|
||||
删除日志
|
||||
|
||||
示例二:添加一个倒计时任务,运行 test.js,每次倒计时 1 秒,执行 3 次
|
||||
|
||||
1 3
|
||||
test.js`
|
||||
} catch(e) {
|
||||
payload.text = e.message
|
||||
}
|
||||
} else {
|
||||
payload.text = 'unknow task operation'
|
||||
}
|
||||
} else if (/^\/?runjs/.test(bodytext)) {
|
||||
let cont = bodytext.trim().split(/ +/)
|
||||
if (cont.length === 1) {
|
||||
try {
|
||||
await context.put('u' + payload['chat_id'], 'runjs')
|
||||
let jslists = await getJsLists()
|
||||
let keyb = {
|
||||
keyboard: [],
|
||||
resize_keyboard: false,
|
||||
one_time_keyboard: true,
|
||||
selective: true
|
||||
}
|
||||
let over = ''
|
||||
if (jslists.length >= 200) {
|
||||
over = '\n\n文件数超过 200,以防 reply_keyboard 过长 TG 无返回,剩余 JS 以文字形式返回\n\n'
|
||||
}
|
||||
for (let ind in jslists) {
|
||||
let s = jslists[ind]
|
||||
if (ind >= 200) {
|
||||
over += s + ' '
|
||||
continue
|
||||
}
|
||||
|
||||
let row = parseInt(ind/2)
|
||||
keyb.keyboard[row]
|
||||
? keyb.keyboard[row].push({
|
||||
text: s.replace(/\.js$/, '')
|
||||
})
|
||||
: keyb.keyboard[row] = [{
|
||||
text: s.replace(/\.js$/, '')
|
||||
}]
|
||||
}
|
||||
payload.text = '进入 RUNJS 模式,当前 elecV2P 上 JS 文件数: ' + jslists.length + '\n点击运行 JS,也可以直接输入文件名或者远程链接\n后面可加空格及其他参数重命名运行的文件,比如\nhttps://随便一个远程JS rmyname.js' + over
|
||||
payload.reply_markup = keyb
|
||||
} catch(e) {
|
||||
payload.text = e.message
|
||||
}
|
||||
} else {
|
||||
payload.text = await jsRun(cont[1], cont[2])
|
||||
}
|
||||
} else if (/^\/?(shell|exec)/.test(bodytext)) {
|
||||
let cont = bodytext.trim().split(' ')
|
||||
if (cont.length === 1) {
|
||||
try {
|
||||
await context.put('u' + payload['chat_id'], 'shell')
|
||||
let keyb = {
|
||||
keyboard: [
|
||||
[{text: 'ls'}, {text: 'node -v'}],
|
||||
[{text: 'apk add python3 ffmpeg'}],
|
||||
[{text: 'python3 -V'}, {text: 'pm2 ls'}]
|
||||
],
|
||||
resize_keyboard: false,
|
||||
one_time_keyboard: true,
|
||||
selective: true
|
||||
}
|
||||
payload.text = '进入 SHELL 模式,可执行简单 shell 指令,比如: ls, node -v 等'
|
||||
payload.reply_markup = keyb
|
||||
} catch(e) {
|
||||
payload.text = e.message
|
||||
}
|
||||
} else {
|
||||
payload.text = await shellRun(bodytext.replace(/^\/?(shell|exec) /, ''))
|
||||
}
|
||||
} else if (/^\/?store/.test(bodytext)) {
|
||||
if (CONFIG_EV2P.mode && CONFIG_EV2P.mode.storemanage) {
|
||||
let cont = bodytext.trim().split(' ')
|
||||
if (cont.length === 1) {
|
||||
try {
|
||||
await context.put('u' + payload['chat_id'], 'store')
|
||||
let storelists = await storeList()
|
||||
let keyb = {
|
||||
keyboard: [],
|
||||
resize_keyboard: false,
|
||||
one_time_keyboard: true,
|
||||
selective: true
|
||||
}
|
||||
let over = ''
|
||||
if (storelists.length >= 200) {
|
||||
over = '\n\nCookie 数超过 200,以防 reply_keyboard 过长 TG 无返回,剩余 Cookie KEY 以文字形式返回\n\n'
|
||||
}
|
||||
for (let ind in storelists) {
|
||||
let s = storelists[ind]
|
||||
if (ind >= 200) {
|
||||
over += s + ' '
|
||||
continue
|
||||
}
|
||||
|
||||
let row = parseInt(ind/2)
|
||||
keyb.keyboard[row]
|
||||
? keyb.keyboard[row].push({
|
||||
text: s
|
||||
})
|
||||
: keyb.keyboard[row] = [{
|
||||
text: s
|
||||
}]
|
||||
}
|
||||
payload.reply_markup = keyb
|
||||
payload.text = '进入 cookie/store 管理模式,当前 elecV2P 上 Cookie 数: ' + storelists.length + '\n\n点击或者直接输入关键字(key)查看 store 内容,比如 cookieKEY\n\n输入 delete key 删除某个 Cookie。比如: delete cookieKEY\n\n输入 key value type(可省略) 修改 store 内容(以空格进行分隔)。如果 value 中包含空格等其他特殊字符,请先使用 encodeURI 函数进行转换。比如:\n\nCookieJD pt_pin=xxx;%20pt_key=app_xxxxxxx;\n\ntype 可省略,也可设定为:\nstring 表示将 value 保存为普通字符(默认)\nobject 表示将 value 保存为 json 格式\na 表示在原来的值上新增。(更多说明可参考 https://github.com/elecV2/elecV2P-dei/tree/master/docs/04-JS.md $store 部分)' + over
|
||||
} catch(e) {
|
||||
payload.text = e.message
|
||||
}
|
||||
} else {
|
||||
payload.text = await storeManage(bodytext.replace(/^\/?store /, ''))
|
||||
}
|
||||
} else {
|
||||
payload.text = 'store/cookie 管理模式处于关闭状态'
|
||||
}
|
||||
} else if (/^\/?log/.test(bodytext)) {
|
||||
let cont = bodytext.trim().split(' ')
|
||||
if (cont.length === 1) {
|
||||
try {
|
||||
await context.put('u' + payload['chat_id'], 'log')
|
||||
let res = await getLogs('all')
|
||||
let map = JSON.parse(res)
|
||||
let keyb = {
|
||||
inline_keyboard: [ ],
|
||||
}
|
||||
|
||||
map.forEach((s, ind)=> {
|
||||
let row = parseInt(ind/2)
|
||||
keyb.inline_keyboard[row]
|
||||
? keyb.inline_keyboard[row].push({
|
||||
text: s.replace(/\.js\.log$/g, ''),
|
||||
url: CONFIG_EV2P.url + 'logs/' + s
|
||||
})
|
||||
: keyb.inline_keyboard[row] = [{
|
||||
text: s.replace(/\.js\.log$/g, ''),
|
||||
url: CONFIG_EV2P.url + 'logs/' + s
|
||||
}]
|
||||
})
|
||||
payload.text = "开始日志查看模式,当前 elecV2P 上日志文件数: " + map.length + "\n点击查看日志或者直接输入 log 文件名进行查看"
|
||||
payload.reply_markup = keyb
|
||||
} catch(e) {
|
||||
payload.text = e.message
|
||||
}
|
||||
} else {
|
||||
payload.text = await getLogs(bodytext.replace(/^\/?log /, ''))
|
||||
}
|
||||
} else if (userenv && userenv.context) {
|
||||
switch (userenv.context) {
|
||||
case 'log':
|
||||
payload.text = await getLogs(bodytext)
|
||||
break
|
||||
case 'runjs':
|
||||
payload.text = await jsRun(bodytext)
|
||||
break
|
||||
case 'task':
|
||||
if (bodytext.trim().split(/\r|\n/).length > 1) {
|
||||
payload.text = await taskNew(bodytext)
|
||||
} else {
|
||||
payload.text = await opTask(bodytext.split(' ').pop(), /^(🐢|\/?stop)/.test(bodytext) ? 'stop' : 'start')
|
||||
}
|
||||
break
|
||||
case 'shell':
|
||||
if (Date.now() - userenv.active > (CONFIG_EV2P.shell && CONFIG_EV2P.shell.contexttimeout)) {
|
||||
payload.text = '已经超过 ' + CONFIG_EV2P.shell.contexttimeout/1000/60 + ' 分钟没有执行 shell 指令,自动退出 shell 模式\n使用 /shell 命令重新进入\n/end 回到普通模式\n/command 查看所有指令'
|
||||
payload.reply_markup = JSON.stringify({
|
||||
remove_keyboard: true
|
||||
})
|
||||
userenv.context = 'normal'
|
||||
} else {
|
||||
payload.text = await shellRun(bodytext)
|
||||
}
|
||||
break
|
||||
case 'store':
|
||||
if (CONFIG_EV2P.mode && CONFIG_EV2P.mode.storemanage) {
|
||||
payload.text = await storeManage(bodytext)
|
||||
} else {
|
||||
payload.text = 'store/cookie 管理模式处于关闭状态'
|
||||
}
|
||||
break
|
||||
default: {
|
||||
payload.text = '当前执行环境: ' + userenv.context + ' 无法处理指令: ' + bodytext
|
||||
}
|
||||
}
|
||||
await context.put(uid, userenv.context, bodytext)
|
||||
} else {
|
||||
payload.text = 'TGbot 部署成功,可以使用相关指令和 elecV2P 服务器进行交互了\nPowered By: https://github.com/elecV2/elecV2P\n\n频道: @elecV2 | 交流群: @elecV2G'
|
||||
if (CONFIG_EV2P.userid.length === 0) {
|
||||
payload.text += '\n(❗️危险⚠️)当前 elecV2P bot 并没有设置 userid,所有人可进行交互'
|
||||
}
|
||||
if (bodytext === '/start') {
|
||||
let status = ''
|
||||
try {
|
||||
status = await getStatus()
|
||||
status = '当前 bot 与 elecV2P 连接成功 ' + status
|
||||
} catch(e) {
|
||||
status = (e.message || e) + '\nelecV2P 服务器没有响应,请检查服务器地址和 webhook token 是否设置正确。'
|
||||
}
|
||||
payload.text += '\n' + status
|
||||
}
|
||||
}
|
||||
|
||||
await tgPush(payload)
|
||||
return new Response("OK")
|
||||
}
|
||||
return new Response(JSON.stringify(body), {
|
||||
headers: { 'content-type': 'application/json' },
|
||||
})
|
||||
} catch(e) {
|
||||
payload.text = e.message || e
|
||||
tgPush(payload)
|
||||
return new Response("OK")
|
||||
}
|
||||
}
|
||||
|
||||
async function handleRequest(request) {
|
||||
let retBody = `welcome to elecV2P.\n\nPowered By: https://github.com/elecV2/elecV2P\n\nTG 频道: https://t.me/elecV2 | TG 交流群: @elecV2G`
|
||||
return new Response(retBody)
|
||||
}
|
||||
|
||||
addEventListener('fetch', event => {
|
||||
const { request } = event
|
||||
// const { url } = request
|
||||
if (request.method === 'POST') {
|
||||
return event.respondWith(handlePostRequest(request))
|
||||
} else if (request.method === 'GET') {
|
||||
return event.respondWith(handleRequest(request))
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* readRequestBody reads in the incoming request body
|
||||
* Use await readRequestBody(..) in an async function to get the string
|
||||
* @param {Request} request the incoming request to read from
|
||||
*/
|
||||
async function readRequestBody(request) {
|
||||
const { headers } = request
|
||||
const contentType = headers.get('content-type')
|
||||
if (contentType.includes('application/json')) {
|
||||
const body = await request.json()
|
||||
return JSON.stringify(body)
|
||||
} else if (contentType.includes('application/text')) {
|
||||
const body = await request.text()
|
||||
return body
|
||||
} else if (contentType.includes('text/html')) {
|
||||
const body = await request.text()
|
||||
return body
|
||||
} else if (contentType.includes('form')) {
|
||||
const formData = await request.formData()
|
||||
let body = {}
|
||||
for (let entry of formData.entries()) {
|
||||
body[entry[0]] = entry[1]
|
||||
}
|
||||
return JSON.stringify(body)
|
||||
} else {
|
||||
let myBlob = await request.blob()
|
||||
var objectURL = URL.createObjectURL(myBlob)
|
||||
return objectURL
|
||||
}
|
||||
}
|
||||
|
||||
async function tgPush(payload) {
|
||||
const myInit = {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=UTF-8'
|
||||
},
|
||||
body: JSON.stringify(payload)
|
||||
};
|
||||
|
||||
let myRequest = new Request(`https://api.telegram.org/bot${CONFIG_EV2P.token}/`, myInit)
|
||||
|
||||
await fetch(myRequest)
|
||||
}
|
||||
838
Conf/Vtop/chavy.boxjs.js
Normal file
314
Conf/Vtop/evui-dou.js
Normal file
@ -0,0 +1,314 @@
|
||||
// (!!测试脚本)该脚本用于在前端网页显示近几天的京豆变化。适用环境: elecV2P
|
||||
// 参考修改自:https://github.com/dompling/Scriptable/blob/master/Scripts/JDDouK.js
|
||||
// 首次运行时耗时较长,请耐心等待
|
||||
// 脚本地址:https://raw.githubusercontent.com/elecV2/elecV2P-dei/master/examples/JSTEST/evui-dou.js
|
||||
|
||||
class Widget {
|
||||
constructor() {
|
||||
this.name = "京东豆收支";
|
||||
this.JDCookie = {
|
||||
cookie: $store.get('CookieJD'),
|
||||
userName: '', // 设置显示的用户名,如果为空将使用京东默认昵称代替
|
||||
};
|
||||
this.rangeDay = 5; // 天数范围配置
|
||||
this.cache = true; // true: 只在每天首次运行时请求新的数据。 false: 每次运行都获取最新数据
|
||||
this.notify = true; // 是否发送通知
|
||||
}
|
||||
|
||||
rangeTimer = {};
|
||||
timerKeys = [];
|
||||
beanCount = 0;
|
||||
beanChange = [];
|
||||
|
||||
chartConfig = (labels = [], datas = [], datas2 = []) => {
|
||||
const color = `#003153`;
|
||||
let template = `
|
||||
{
|
||||
'type': 'bar',
|
||||
'data': {
|
||||
'labels': __LABELS__,
|
||||
'datasets': [
|
||||
{
|
||||
type: 'line',
|
||||
backgroundColor: '#fff',
|
||||
borderColor: getGradientFillHelper('vertical', ['#c8e3fa', '#e62490']),
|
||||
'borderWidth': 2,
|
||||
pointRadius: 5,
|
||||
'fill': false,
|
||||
'data': __DATAS__,
|
||||
},
|
||||
{
|
||||
type: 'line',
|
||||
backgroundColor: '#88f',
|
||||
borderColor: getGradientFillHelper('vertical', ['#c8e3fa', '#0624e9']),
|
||||
'borderWidth': 2,
|
||||
pointRadius: 5,
|
||||
'fill': false,
|
||||
'data': __DATAS2__,
|
||||
},
|
||||
],
|
||||
},
|
||||
'options': {
|
||||
plugins: {
|
||||
datalabels: {
|
||||
display: true,
|
||||
align: 'top',
|
||||
color: __COLOR__,
|
||||
font: {
|
||||
size: '16'
|
||||
}
|
||||
},
|
||||
},
|
||||
layout: {
|
||||
padding: {
|
||||
left: 0,
|
||||
right: 0,
|
||||
top: 30,
|
||||
bottom: 5
|
||||
}
|
||||
},
|
||||
responsive: true,
|
||||
maintainAspectRatio: true,
|
||||
'legend': {
|
||||
'display': false,
|
||||
},
|
||||
'title': {
|
||||
'display': false,
|
||||
},
|
||||
scales: {
|
||||
xAxes: [
|
||||
{
|
||||
gridLines: {
|
||||
display: false,
|
||||
color: __COLOR__,
|
||||
},
|
||||
ticks: {
|
||||
display: true,
|
||||
fontColor: __COLOR__,
|
||||
fontSize: '16',
|
||||
},
|
||||
},
|
||||
],
|
||||
yAxes: [
|
||||
{
|
||||
ticks: {
|
||||
display: false,
|
||||
beginAtZero: true,
|
||||
fontColor: __COLOR__,
|
||||
},
|
||||
gridLines: {
|
||||
borderDash: [7, 5],
|
||||
display: false,
|
||||
color: __COLOR__,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
}`;
|
||||
|
||||
template = template.replaceAll("__COLOR__", `'${color}'`);
|
||||
template = template.replace("__LABELS__", `${JSON.stringify(labels)}`);
|
||||
template = template.replace("__DATAS__", `${JSON.stringify(datas)}`);
|
||||
template = template.replace("__DATAS2__", `${JSON.stringify(datas2)}`);
|
||||
return template;
|
||||
};
|
||||
|
||||
init = async () => {
|
||||
try {
|
||||
if (!this.JDCookie.cookie) return;
|
||||
this.rangeTimer = this.getDay(this.rangeDay);
|
||||
this.rangeTimerd = this.getDay(this.rangeDay);
|
||||
this.timerKeys = Object.keys(this.rangeTimer);
|
||||
await this.getAmountData();
|
||||
await this.TotalBean();
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
};
|
||||
|
||||
getAmountData = async () => {
|
||||
let i = 0,
|
||||
page = 1;
|
||||
do {
|
||||
let response = await this.getJingBeanBalanceDetail(page);
|
||||
// console.debug(response.data)
|
||||
response = response.data
|
||||
const result = response.code === "0";
|
||||
console.log(`正在获取京豆收支明细,第${page}页:${result ? "请求成功" : "请求失败"}`);
|
||||
if (response.code === "3") {
|
||||
i = 1;
|
||||
console.log(response);
|
||||
}
|
||||
if (response && result) {
|
||||
page++;
|
||||
let detailList = response.jingDetailList;
|
||||
if (detailList && detailList.length > 0) {
|
||||
for (let item of detailList) {
|
||||
const dates = item.date.split(" ");
|
||||
if (this.timerKeys.indexOf(dates[0]) > -1) {
|
||||
const amount = Number(item.amount);
|
||||
if (amount > 0) this.rangeTimer[dates[0]] += amount;
|
||||
else this.rangeTimerd[dates[0]] += amount
|
||||
} else {
|
||||
i = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} while (i === 0);
|
||||
};
|
||||
|
||||
getDay(dayNumber) {
|
||||
let data = {};
|
||||
let i = dayNumber;
|
||||
do {
|
||||
const today = new Date();
|
||||
const year = today.getFullYear();
|
||||
const targetday_milliseconds = today.getTime() - 1000 * 60 * 60 * 24 * i;
|
||||
today.setTime(targetday_milliseconds); //注意,这行是关键代码
|
||||
let month = today.getMonth() + 1;
|
||||
month = month >= 10 ? month : `0${month}`;
|
||||
let day = today.getDate();
|
||||
day = day >= 10 ? day : `0${day}`;
|
||||
data[`${year}-${month}-${day}`] = 0;
|
||||
i--;
|
||||
} while (i >= 0);
|
||||
return data;
|
||||
}
|
||||
|
||||
getJingBeanBalanceDetail = async (page) => {
|
||||
try {
|
||||
const options = {
|
||||
url: `https://bean.m.jd.com/beanDetail/detail.json`,
|
||||
body: `page=${page}`,
|
||||
headers: {
|
||||
Accept: "application/json,text/plain, */*",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-cn",
|
||||
Connection: "keep-alive",
|
||||
Cookie: this.JDCookie.cookie,
|
||||
Referer: "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2",
|
||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1",
|
||||
},
|
||||
method: 'post'
|
||||
};
|
||||
return await $axios(options);
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
};
|
||||
|
||||
TotalBean = async () => {
|
||||
const options = {
|
||||
"url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`,
|
||||
"headers": {
|
||||
"Accept": "application/json,text/plain, */*",
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
"Accept-Encoding": "gzip, deflate, br",
|
||||
"Accept-Language": "zh-cn",
|
||||
"Connection": "keep-alive",
|
||||
"Cookie": this.JDCookie.cookie,
|
||||
"Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2",
|
||||
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1"
|
||||
}
|
||||
}
|
||||
let res = await $axios(options)
|
||||
if (res && res.data) {
|
||||
let data = res.data
|
||||
if (data.retcode === 0 && data.base) {
|
||||
this.JDCookie.userName = this.JDCookie.userName || data.base.nickname
|
||||
this.beanCount = data.base.jdNum
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
createChart = async () => {
|
||||
let labels = [],
|
||||
data = [], data2 = [];
|
||||
Object.keys(this.rangeTimer).forEach((month) => {
|
||||
const value = this.rangeTimer[month];
|
||||
const arrMonth = month.split("-");
|
||||
labels.push(`${arrMonth[1]}.${arrMonth[2]}`);
|
||||
data.push(value);
|
||||
data2.push(this.rangeTimerd[month])
|
||||
});
|
||||
this.beanChange.push(data)
|
||||
this.beanChange.push(data2)
|
||||
const chartStr = this.chartConfig(labels, data, data2);
|
||||
console.debug(chartStr);
|
||||
|
||||
return await this.chartUrl(chartStr)
|
||||
};
|
||||
|
||||
chartUrl = async (data) => {
|
||||
const req = {
|
||||
url: 'https://quickchart.io/chart/create',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
method: 'post',
|
||||
data: {
|
||||
"backgroundColor": "transparent",
|
||||
"width": 580,
|
||||
"height": 320,
|
||||
"format": "png",
|
||||
"chart": data
|
||||
}
|
||||
}
|
||||
return await $axios(req)
|
||||
}
|
||||
}
|
||||
|
||||
!(async ()=>{
|
||||
let evdou = $store.get('evdou'),
|
||||
today = new Date().getDay()
|
||||
const eDou = new Widget()
|
||||
if (eDou.cache && evdou && evdou.day === today && evdou.imgurl) {
|
||||
console.log('使用 cache 数据显示', eDou.name)
|
||||
} else {
|
||||
await eDou.init()
|
||||
let res = await eDou.createChart()
|
||||
let data = res.data
|
||||
if (data && data.success) {
|
||||
evdou = {
|
||||
day: today,
|
||||
userName: eDou.JDCookie.userName,
|
||||
total: eDou.beanCount,
|
||||
change: eDou.beanChange,
|
||||
imgurl: data.url,
|
||||
}
|
||||
$store.put(evdou, 'evdou')
|
||||
} else {
|
||||
console.log(data)
|
||||
}
|
||||
}
|
||||
|
||||
if (evdou.imgurl) {
|
||||
showChart(evdou.imgurl, evdou.userName, evdou.total, eDou.name)
|
||||
if (eDou.notify) {
|
||||
let body = evdou.userName + ': ' + evdou.total
|
||||
if (evdou.change) {
|
||||
body += '\n' + '近期收入:' + evdou.change[0].join(', ')
|
||||
body += '\n' + '近期支出:' + evdou.change[1].join(', ')
|
||||
}
|
||||
$feed.push(eDou.name, evdou.userName + ': ' + evdou.total, evdou.imgurl)
|
||||
}
|
||||
}
|
||||
})().catch(e=>console.log(e))
|
||||
|
||||
function showChart(imgurl, userName, total, title) {
|
||||
$evui({
|
||||
title,
|
||||
width: 640,
|
||||
height: 389,
|
||||
content: `<div style="filter: blur(3px);-webkit-filter: blur(3px);background: url(https://bing.ioliu.cn/v1/rand);height: 100%;"></div><div style="position: absolute;right: 12px;top: 46px;padding: 8px;border: 1px solid #003153;border-radius: 20px;">${userName}: ${total}</div><img style="background: #ffffff88;position: absolute;top: 36px;left: 0;" src="${imgurl}">`,
|
||||
style: {
|
||||
title: "background: #6B8E23;",
|
||||
content: "text-align: center"
|
||||
},
|
||||
resizable: true,
|
||||
}).then(data=>console.log(data)).catch(e=>console.log(e))
|
||||
}
|
||||
38
Conf/Vtop/exam-tasksub.js
Normal file
@ -0,0 +1,38 @@
|
||||
// 通过 webhook 添加定时任务订阅。运行前根据具体情况修改 suburl 和 webhook 里面的内容
|
||||
// 每次运行都会添加新任务,请不要多次运行
|
||||
// 这只是一个简单的范例,如果出现未知问题,手动修正一下代码
|
||||
|
||||
const suburl = 'https://raw.githubusercontent.com/nzw9314/QuantumultX/master/Task_Remote.conf'
|
||||
|
||||
const webhook = {
|
||||
url: '/webhook', // 远程: http://sss.xxxx.com/webhook
|
||||
token: 'a8c259b2-67fe-4c64-8700-7bfdf1f55cb3', // 在 webUI->SETTING 界面查找
|
||||
}
|
||||
|
||||
$axios(suburl).then(res=>{
|
||||
const body = res.data
|
||||
const mastr = body.matchAll(/([0-9\-\*\/]+ [0-9\-\*\/]+ [0-9\-\*\/]+ [0-9\-\*\/]+ [0-9\-\*\/]+( [0-9\-\*\/]+)?) ([^ ,]+), ?tag=([^, \n\r]+)/g)
|
||||
|
||||
;[...mastr].forEach(mr=>{
|
||||
if (mr[3] && mr[1]) {
|
||||
$axios({
|
||||
url: webhook.url,
|
||||
method: 'post',
|
||||
data: {
|
||||
token: webhook.token,
|
||||
type: 'taskadd',
|
||||
task: {
|
||||
name: mr[4] || 'tasksub-新的任务',
|
||||
type: 'cron',
|
||||
job: {
|
||||
type: 'runjs',
|
||||
target: mr[3],
|
||||
},
|
||||
time: mr[1],
|
||||
running: true // 是否自动执行添加的任务
|
||||
}
|
||||
}
|
||||
}).then(res=>console.log(res.data))
|
||||
}
|
||||
})
|
||||
}).catch(e=>console.error(e))
|
||||
8
Conf/Vtop/reboot.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 系统重启脚本,谨慎使用,无法取消
|
||||
|
||||
const countdown = 30 // 重启等待时间,单位:秒
|
||||
console.log('操作系统将在', countdown, '后重启')
|
||||
|
||||
setTimeout(()=>{
|
||||
$exec('reboot', data=>console.log(data))
|
||||
}, countdown*1000)
|
||||
32
Conf/Vtop/wechatsubs.json
Normal file
@ -0,0 +1,32 @@
|
||||
[
|
||||
{
|
||||
"name":"elecV2/elecV2P-dei",
|
||||
"url":"https://github.com/elecV2/elecV2P-dei"
|
||||
},
|
||||
{
|
||||
"name":"chinnkarahoi/jd_scripts",
|
||||
"url":"https://github.com/chinnkarahoi/jd_scripts"
|
||||
},
|
||||
{
|
||||
"name":"wisz2021/jd_docker",
|
||||
"url":"https://github.com/wisz2021/jd_docker"
|
||||
},
|
||||
{
|
||||
"name":"whyour/qinglong",
|
||||
"url":"https://github.com/whyour/qinglong"
|
||||
},
|
||||
{
|
||||
"name":"monk-coder/dust",
|
||||
"url":"https://github.com/monk-coder/dust"
|
||||
},
|
||||
{
|
||||
"name":"sngxpro/QuanX",
|
||||
"url":"https://github.com/sngxpro/QuanX"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
"repo":"[\n {\n \"name\":\"elecV2/elecV2P-dei\",\n \"url\":\"https://github.com/elecV2/elecV2P-dei\"\n },\n {\n \"name\":\"chinnkarahoi/jd_scripts\",\n \"url\":\"https://github.com/chinnkarahoi/jd_scripts\"\n },\n {\n \"name\":\"wisz2021/jd_docker\",\n \"url\":\"https://github.com/wisz2021/jd_docker\"\n },\n {\n \"name\":\"whyour/qinglong\",\n \"url\":\"https://github.com/whyour/qinglong\"\n },\n {\n \"name\":\"monk-coder/dust\",\n \"url\":\"https://github.com/monk-coder/dust\"\n },\n {\n \"name\":\"sngxpro/QuanX\",\n \"url\":\"https://github.com/sngxpro/QuanX\"\n }\n]",
|
||||
|
||||
|
||||
|
||||
11
Dict/Readme.md
Normal file
@ -0,0 +1,11 @@
|
||||
# Basic Tutorials & Dictionaries
|
||||
|
||||
## ✦ Learning-Markdown
|
||||
> [README](https://github.com/Oreomeow/README#readme)
|
||||
> [learn-md](https://xianbai.me/learn-md/index.html)
|
||||
|
||||
## ✦ Docker
|
||||
> [Docker Tutorials | Rookie Tutorials](https://www.runoob.com/docker/docker-tutorial.html)
|
||||
|
||||
## ✦ Regular Expression
|
||||
> [Syntax](https://www.runoob.com/regexp/regexp-syntax.html)
|
||||
38
INS/Crontab.md
Normal file
@ -0,0 +1,38 @@
|
||||
# Linux crontab 相关
|
||||
|
||||
## 启动
|
||||
1. 在系统中有 service 这个命令时:
|
||||
这个命令在 red hat 当中常用,有的 linux 发行版本中没有这个命令.
|
||||
```
|
||||
service crond start //启动服务
|
||||
```
|
||||
```
|
||||
service crond stop //关闭服务
|
||||
```
|
||||
```
|
||||
service crond restart //重启服务
|
||||
```
|
||||
|
||||
2. linux 发行版本没有 service 这个命令时:
|
||||
```
|
||||
/etc/init.d/cron stop
|
||||
```
|
||||
```
|
||||
/etc/init.d/cron start
|
||||
```
|
||||
|
||||
3. 执行出现 /bin/systemctl 。。。。说明是新版的可用以下命令操作
|
||||
```
|
||||
/bin/systemctl restart crond.service #启动服务
|
||||
```
|
||||
```
|
||||
/bin/systemctl reload crond.service #重新载入配置
|
||||
```
|
||||
```
|
||||
/bin/systemctl status crond.service #查看 crontab 服务状态
|
||||
```
|
||||
|
||||
## 解决crontab执行时间与系统时间不一致的问题
|
||||
```
|
||||
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
```
|
||||
129
INS/FVPS/EUserv/README.md
Normal file
@ -0,0 +1,129 @@
|
||||
|
||||
### 给EUserv IPV6添加WARP,白嫖WARP高速通道!针对OpenVZ、LXC架构的IPV6 only VPS!
|
||||
|
||||
### IPV6 only VPS添加WARP的好处:
|
||||
|
||||
1:使只有IPV6的VPS获取访问IPV4的能力,套上WARP的ip,变成双栈VPS!
|
||||
|
||||
2:基本能隐藏VPS的真实IP!
|
||||
|
||||
3:支持代理协议直连电报Telegram,支持代理协议连通软路由Openwrt各种翻墙插件!
|
||||
|
||||
4:WARP分配的IPV4或者IPV6的IP段,都支持奈非Netflix流媒体,无视VPS原IP限制!
|
||||
|
||||
5:支持原本需要IPV4支持的Docker等应用!
|
||||
|
||||
6:加速VPS到CloudFlare CDN节点访问速度!
|
||||
|
||||
7:避开原VPS的IP需要谷歌验证码问题!
|
||||
|
||||
8:替代NAT64/DNS64方案,网络效率更高!
|
||||
|
||||
#### WARP原理与及搭建探讨:https://youtu.be/78dZgYFS-Qo
|
||||
|
||||
#### 抛弃DNS64、自定义域名、IP分流教程(推荐):https://youtu.be/fY9HDLJ7mnM
|
||||
|
||||
#### 联合Oracle甲骨文https://github.com/YG-tsj/Oracle-warp #双栈Warp接管IPV4与IPV6网络:https://youtu.be/o7e_ikV-m-g
|
||||
-------------------------------------------------------------------------------------------------------
|
||||
|
||||
### 一:恢复EUserv官方DNS64(重装系统者,可直接跳到第二步脚本安装)
|
||||
```
|
||||
echo -e "search blue.kundencontroller.de\noptions rotate\nnameserver 2a02:180:6:5::1c\nnameserver 2a02:180:6:5::4\nnameserver 2a02:180:6:5::1e\nnameserver 2a02:180:6:5::1d" > /etc/resolv.conf
|
||||
```
|
||||
|
||||
### 二、重装系统能解决99%的问题!无须添加DNS64!一键到底!
|
||||
|
||||
#### 仅支持Debian 10/Ubuntu 20.04系统,根据自己需求选择以下脚本1或者脚本2(有无成功可查看脚本末尾提示)
|
||||
|
||||
#### 脚本1:IPV4是WARP分配的IP,IPV6是VPS本地IP
|
||||
```
|
||||
wget -qO- https://cdn.jsdelivr.net/gh/YG-tsj/EUserv-warp/warp4.sh|bash
|
||||
```
|
||||
#### 脚本2:IPV4与IPV6都是WARP分配的IP
|
||||
```
|
||||
wget -qO- https://cdn.jsdelivr.net/gh/YG-tsj/EUserv-warp/warp64.sh|bash
|
||||
```
|
||||
----------------------------------------------------------------------------------------------------
|
||||
#### Netflix检测项目:https://github.com/YG-tsj/Netflix-Check
|
||||
|
||||
#### 注意:域名解析所填写的IP必须是VPS本地IP,与WARP分配的IP没关系!
|
||||
|
||||
#### 推荐使用Xray脚本项目(mack-a):https://github.com/mack-a/v2ray-agent 注意:只选择CDN(WS协议与gRPC协议),IP地址改为自定义优选IP,例:icook.tw
|
||||
|
||||
#### 提示:配置文件wgcf.conf和注册文件wgcf-account.toml都已备份在/etc/wireguard目录下!
|
||||
--------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#### 查看WARP当前统计状态:```wg```
|
||||
|
||||
#### 查看当前IPV4 IP:```curl -4 ip.p3terx.com```
|
||||
|
||||
#### 查看当前IPV6 IP:```curl -6 ip.p3terx.com```
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
#### IPV6 VPS专用分流配置文件(以下默认全局IPV4优先,IP、域名自定义,详情见视频教程)
|
||||
```
|
||||
{
|
||||
"outbounds": [
|
||||
{
|
||||
"tag":"IP6-out",
|
||||
"protocol": "freedom",
|
||||
"settings": {}
|
||||
},
|
||||
{
|
||||
"tag":"IP4-out",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"domainStrategy": "UseIPv4"
|
||||
}
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"outboundTag": "IP4-out",
|
||||
"domain": [""]
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"outboundTag": "IP6-out",
|
||||
"network": "udp,tcp"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
---------------------------------------------------------------------------------------------------------
|
||||
|
||||
#### 相关WARP进程命令
|
||||
|
||||
手动临时关闭WARP网络接口
|
||||
```
|
||||
wg-quick down wgcf
|
||||
```
|
||||
手动开启WARP网络接口
|
||||
```
|
||||
wg-quick up wgcf
|
||||
```
|
||||
|
||||
启动systemctl enable wg-quick@wgcf
|
||||
|
||||
开始systemctl start wg-quick@wgcf
|
||||
|
||||
重启systemctl restart wg-quick@wgcf
|
||||
|
||||
停止systemctl stop wg-quick@wgcf
|
||||
|
||||
关闭systemctl disable wg-quick@wgcf
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
感谢P3terx大及原创者们,参考来源:
|
||||
|
||||
https://p3terx.com/archives/debian-linux-vps-server-wireguard-installation-tutorial.html
|
||||
|
||||
https://p3terx.com/archives/use-cloudflare-warp-to-add-extra-ipv4-or-ipv6-network-support-to-vps-servers-for-free.html
|
||||
|
||||
https://luotianyi.vc/5252.html
|
||||
|
||||
https://hiram.wang/cloudflare-wrap-vps/
|
||||
170
INS/FVPS/Oracle/README.md
Normal file
@ -0,0 +1,170 @@
|
||||
## 近期脚本将整合warp及其他多功能,方便大家使用!!
|
||||
|
||||
## 欢迎体验多功能一键脚本(功能继续添加中……):
|
||||
|
||||
```
|
||||
wget -N --no-check-certificate https://raw.githubusercontent.com/YG-tsj/Oracle-warp/main/multi.sh && chmod +x multi.sh && ./multi.sh
|
||||
```
|
||||
|
||||
#### 进入脚本快捷方式```bash ~/multi.sh```
|
||||
---------------------------------------------------------------------------------------------------------------
|
||||
## 以下内容将配合多功能脚本做出说明,将重新调整。。。。。更新中。。
|
||||
|
||||
### Oracle甲骨文脚本集合,针对KVM架构IPV4 only VPS与IPV4+IPV6真双栈VPS。
|
||||
|
||||
### 本项目IPV4 only VPS的Youtube视频教程:https://youtu.be/o7e_ikV-m-g
|
||||
|
||||
### IPV4+IPV6真双栈VPS视频教程:下期更新。。。。。。。。
|
||||
|
||||
### EUserv ipv6的(OpenVZ、LXC架构VPS)WARP项目:https://github.com/YG-tsj/EUserv-warp
|
||||
|
||||
### 给ipv4 only VPS添加WARP的好处:
|
||||
|
||||
1:使只有IPV4的VPS获取访问IPV6的能力,套上WARP的ip,变成双栈VPS!
|
||||
|
||||
2:基本能隐藏VPS的真实IP!
|
||||
|
||||
3:WARP分配的IPV4或者IPV6的IP段,都支持奈非Netflix流媒体,无视VPS原IP限制!
|
||||
|
||||
4:加速VPS到CloudFlare CDN节点访问速度!
|
||||
|
||||
5:避开原VPS的IP需要谷歌验证码问题!
|
||||
|
||||
6:WARP的IPV6替代HE tunnelbroker IPV6的隧道代理方案,做IPV6 VPS跳板机代理更加稳定、高效!
|
||||
|
||||
--------------------------------------------------------------------------------------------------------
|
||||
### 一:设置Root密码一键脚本(默认ROOT权限,方便登录与编辑文件)(KVM架构VPS通用)!!
|
||||
|
||||
```
|
||||
bash <(curl -sSL https://raw.githubusercontent.com/YG-tsj/Oracle-warp/main/root.sh)
|
||||
```
|
||||
-----------------------------------------------------------------------------------------------------
|
||||
### 二:更新甲骨文Ubuntu系统内核一键脚本(KVM架构VPS通用,5.6以上不用安装)
|
||||
|
||||
#### 目前甲骨文Ubuntu20.04系统内核为5.4版本(查看内核版本```uname -r```),而5.6版本以上内核才集成Wireguard,内核集成方案在理论上网络效率最高!(网络性能:内核集成>内核模块>Wireguard-Go)
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
### 三:开启BBR加速(秋水逸冰大老-传统版,KVM架构VPS通用)
|
||||
|
||||
#### 检测BBR是否生效(显示有BBR,说明成功):```lsmod | grep bbr```
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
### 四:情况一(仅支持IPV4 VPS)
|
||||
|
||||
#### 根据自己需求选择脚本1、脚本2或者脚本3,仅支持Ubuntu 20.04系统,系统内核必须5.6以上!脚本1与脚本2支持IPV6跳板机
|
||||
|
||||
#### 脚本1(真IPV4+虚IPV6):IPV6是WARP分配的IP (推荐其他KVM架构IPV4 VPS直接使用,无须输入相关IP)
|
||||
|
||||
#### 脚本2(真虚IPV4+虚IPV6):IPV4与IPV6都是WARP分配的IP(须输入专用IP)
|
||||
|
||||
#### 脚本3(真虚IPV4): IPV4是WARP分配的IP,无IPV6(须输入专用IP)
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------
|
||||
### 四:情况二(仅支持IPV4+IPV6的真双栈VPS,甲骨文支持开启IPV6,支持IPV6跳板机,支持IPV4与IPV6双线SSH同时登录!!):YouTube视频教程下期更新。
|
||||
|
||||
#### 根据自己需求选择脚本1、脚本2或者脚本3,仅支持Ubuntu 20.04系统,系统内核必须5.6以上!
|
||||
|
||||
#### 脚本1(真IPV4+真虚IPV6):IPV6是WARP分配的IP (须输入IPV6本地IP)
|
||||
|
||||
#### 脚本2(真虚IPV4+真虚IPV6):IPV4与IPV6都是WARP分配的IP(须输入专用IP与IPV6本地IP)
|
||||
|
||||
#### 脚本3(真虚IPV4+真IPV6):IPV4是WARP分配的IP(须输入专用IP)
|
||||
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------
|
||||
### 注意:域名解析所填写的IP必须是VPS本地IP,与WARP分配的IP没关系!
|
||||
|
||||
### 推荐使用的Xray脚本项目:https://github.com/mack-a/v2ray-agent (注意CDN的WS、gRPC协议改自选IP,如:icook.tw等)
|
||||
|
||||
-------------------------------------------------------------------------------------------
|
||||
### 其他KVM架构VPS查看专用ip方式(待更新)
|
||||
脚本1不用输入专用IP。脚本2与3需要输入专用IP(防止VPS本地IP套WARP后失联),根据不同的VPS,专用IP可能是IP,也可能是IP段。
|
||||
|
||||
进入SSH查看专用IP命令:```ip -4 route```或者```ip addr```
|
||||
|
||||
结果会显示IP或者IP段,IP段用 /数字 表示!
|
||||
|
||||
例:有的VPS公网IP为123.456.2.3,而专用IP段可能就是123.456.0.1/16,此时,要输入的专用IP就是123.456.0.1/16,别忘记输入后面的/16哦!
|
||||
|
||||
由于各VPS厂商对专用IP的规定不一,具体大家可以自己尝试,输错了可能导致VPS失联,也就那几个IP或者IP段,。
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
#### Netflix检测项目:https://github.com/YG-tsj/Netflix-Check
|
||||
|
||||
#### 提示:配置文件wgcf.conf和注册文件wgcf-account.toml都已备份在/etc/wireguard目录下!
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
##### 查看WARP当前统计状态:```wg```
|
||||
|
||||
#### 查看当前IPV4 IP:```curl -4 ip.p3terx.com```
|
||||
|
||||
#### 查看当前IPV6 IP:```curl -6 ip.p3terx.com```
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
|
||||
##### IPV4 VPS WARP专用分流配置文件(以下默认全局IPV4优先,IP、域名自定义教程,参考https://youtu.be/fY9HDLJ7mnM)
|
||||
```
|
||||
{
|
||||
"outbounds": [
|
||||
{
|
||||
"tag":"IP4-out",
|
||||
"protocol": "freedom",
|
||||
"settings": {}
|
||||
},
|
||||
{
|
||||
"tag":"IP6-out",
|
||||
"protocol": "freedom",
|
||||
"settings": {
|
||||
"domainStrategy": "UseIPv6"
|
||||
}
|
||||
}
|
||||
],
|
||||
"routing": {
|
||||
"rules": [
|
||||
{
|
||||
"type": "field",
|
||||
"outboundTag": "IP4-out",
|
||||
"domain": [""]
|
||||
},
|
||||
{
|
||||
"type": "field",
|
||||
"outboundTag": "IP6-out",
|
||||
"network": "udp,tcp"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
-----------------------------------------------------------------------------------------------
|
||||
#### 相关WARP进程命令
|
||||
|
||||
手动临时关闭WARP网络接口
|
||||
```
|
||||
wg-quick down wgcf
|
||||
```
|
||||
手动开启WARP网络接口
|
||||
```
|
||||
wg-quick up wgcf
|
||||
```
|
||||
|
||||
启动systemctl enable wg-quick@wgcf
|
||||
|
||||
开始systemctl start wg-quick@wgcf
|
||||
|
||||
重启systemctl restart wg-quick@wgcf
|
||||
|
||||
停止systemctl stop wg-quick@wgcf
|
||||
|
||||
关闭systemctl disable wg-quick@wgcf
|
||||
|
||||
|
||||
---------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
感谢P3terx大及原创者们,参考来源:
|
||||
|
||||
https://p3terx.com/archives/debian-linux-vps-server-wireguard-installation-tutorial.html
|
||||
|
||||
https://p3terx.com/archives/use-cloudflare-warp-to-add-extra-ipv4-or-ipv6-network-support-to-vps-servers-for-free.html
|
||||
|
||||
https://luotianyi.vc/5252.html
|
||||
|
||||
https://hiram.wang/cloudflare-wrap-vps/
|
||||
171
INS/JD/Others/JDMemberCloseAccount.md
Normal file
@ -0,0 +1,171 @@
|
||||
## 利用JDMemberCloseAccount注销京东会员
|
||||
|
||||
### 超简单,有手会动脑子就能学会
|
||||
|
||||
### 要求
|
||||
|
||||
1. 安装Git
|
||||
2. 安装python3版本,本机安装的是[Python3.8.5](https://www.python.org/downloads/release/python-385/)
|
||||
3. 选择性安装[PyCharm](https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=windows&code=PCC)
|
||||
|
||||
|
||||
|
||||
### 安装方法
|
||||
|
||||
1. 克隆到本地
|
||||
|
||||
- 在本机任意文件夹内右键鼠标选择`git bash here`
|
||||
|
||||
```shell
|
||||
git clone git@github.com:yqchilde/JDMemberCloseAccount.git
|
||||
#没拉下来就用下面的
|
||||
git clone https://github.com/yqchilde/JDMemberCloseAccount.git
|
||||
```
|
||||
|
||||
> 不会这一步的可以直接下载压缩包解压,下载压缩包再不会的话Windows用户请点击屏幕右上角的`X`,Mac os用户请点击屏幕左上角的`红色圆点`
|
||||
|
||||
2. 安装所需要的包
|
||||
|
||||
- 在克隆仓库下的文件夹内复制粘贴以下命令
|
||||
|
||||

|
||||
|
||||
```shell
|
||||
pip3 install -r requirements.txt
|
||||
```
|
||||
|
||||
3. `chrome`请访问`chrome://version/`查看浏览器的版本,然后去 [chromedriver](http://chromedriver.storage.googleapis.com/index.html) 下载对应的版本/系统驱动,放到项目的`drivers`文件夹下面
|
||||
|
||||
4. 配置`config.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"device": "ios",
|
||||
"baidu_app_id": "",
|
||||
"baidu_api_key": "",
|
||||
"baidu_secret_key": "",
|
||||
"baidu_range": [1231,393,1383,412],
|
||||
"baidu_delay_time": 5,
|
||||
"browserType": "Chrome",
|
||||
"headless": false,
|
||||
"binary": "",
|
||||
"cjy_validation": false,
|
||||
"cjy_username": "",
|
||||
"cjy_password": "",
|
||||
"cjy_soft_id": "",
|
||||
"cjy_kind": 9101,
|
||||
"tj_validation": false,
|
||||
"tj_username": "",
|
||||
"tj_password": "",
|
||||
"tj_type_id": 19,
|
||||
"ws_conn_url": "ws://localhost:5201/subscribe",
|
||||
"ws_timeout": 60,
|
||||
"selenium_timeout": 30,
|
||||
"skip_shops": "",
|
||||
"phone_tail_number": "",
|
||||
"mobile_cookie": "",
|
||||
"users": {}
|
||||
}
|
||||
```
|
||||
|
||||
<details><summary>碍眼的配置,想看可以点开看看,一般默认就可以</summary><br>
|
||||
|
||||
* `device`: 如果是ios设备就填写ios,安卓留空
|
||||
|
||||
* `baidu_app_id`: 需要在[百度智能云](https://cloud.baidu.com/) 注册个账号,搜索文字识别项目,创建应用后的`app_id`
|
||||
|
||||
* `baidu_api_key`: 需要在[百度智能云](https://cloud.baidu.com/) 注册个账号,搜索文字识别项目,创建应用后的`api_key`
|
||||
|
||||
* `baidu_secret_key`: 需要在[百度智能云](https://cloud.baidu.com/) 注册个账号,搜索文字识别项目,创建应用后的`secret_key`
|
||||
|
||||
* `baidu_range`: 需要截取的投屏区域的验证码左上角和右下角坐标,顺序依次是 [左x,左y,右x,右y]
|
||||
|
||||
* `baidu_delay_time`: 百度OCR识别的延迟时间,如果没识别到就几秒后再次尝试,默认为5
|
||||
|
||||
* `browserType`: 浏览器类型
|
||||
|
||||
* `headless`: 无头模式,建议默认设置
|
||||
|
||||
* `binary`: 可执行路径,如果驱动没有找到浏览器的话需要你手动配置
|
||||
|
||||
* `cjy_validation`: 是否开启超级鹰验证图形验证码
|
||||
|
||||
* `cjy_username`: 超级鹰账号,仅在 cjy_validation 为 true 时需要设置
|
||||
|
||||
* `cjy_password`: 超级鹰密码,仅在 cjy_validation 为 true 时需要设置
|
||||
|
||||
* `cjy_soft_id`: 超级鹰软件ID,仅在 cjy_validation 为 true 时需要设置
|
||||
|
||||
* `cjy_kind`: 超级鹰验证码类型,仅在 cjy_validation 为 true 时需要设置,且该项目指定为 `9101`
|
||||
|
||||
* `tj_validation`: 是否开启图鉴验证图形验证码
|
||||
|
||||
* `tj_username`: 图鉴账号,仅在 tj_validation 为 true 时需要设置
|
||||
|
||||
* `tj_password`: 图鉴密码,仅在 tj_validation 为 true 时需要设置
|
||||
|
||||
* `tj_type_id`: 超级鹰验证码类型,仅在 tj_validation 为 true 时需要设置,且该项目指定为 `19`
|
||||
|
||||
* `ws_conn_url`: websocket链接地址,不用动
|
||||
|
||||
* `ws_timeout`: websocket接收验证码时间超时时间,超时会跳过当前店铺,进行下一个店铺,默认为60秒
|
||||
|
||||
* `selenium_timeout`: selenium操作超时时间,超过会跳过当前店铺,进行下一个店铺,默认为30秒
|
||||
|
||||
* `skip_shops`: 需要跳过的店铺,需要填写卡包中的完整店铺名称,为了效率没做模糊匹配,多个店铺用逗号隔开
|
||||
|
||||
* `phone_tail_number`: 手机后4位尾号,若填写将会校验店铺尾号是否是规定的,不符合就跳过
|
||||
|
||||
* `mobile_cookie`: 手机端cookie,是pt_key开头的那个
|
||||
|
||||
* `users`: web端cookie,通过add_cookie.py添加
|
||||
</details>
|
||||
|
||||
5. 添加`cookie`
|
||||
|
||||
* web端cookie:请在项目目录下执行`python3 add_cookie.py`, 在打开的浏览器界面登录你的京东,此时你可以看到`config.json`已经有了你的用户信息(**请不要随意泄露你的cookie**)
|
||||
* 手机端cookie:在 config.json 中写入 mobile_cookie 项,注意是pt_key开头的那个(请不要随意泄露你的cookie)
|
||||
|
||||
|
||||
6. 执行主程序
|
||||
|
||||
在项目目录下执行`python3 main.py`,等待执行完毕即可
|
||||
|
||||
## websocket服务端运行
|
||||
|
||||
下载 [jd_wstool](https://github.com/yqchilde/JDMemberCloseAccount/releases),选择自己的电脑系统对应的压缩包,解压运行
|
||||
|
||||
## 手机端短信如何传递给电脑端
|
||||
|
||||
<details><summary>安卓端</summary><br>
|
||||
用 `Macrodroid监听`,在https://pan.imqimu.cn/E5/APP
|
||||
下载第三个文件和下载倒数第二个配置文件导入到Macrodroid内
|
||||
|
||||
```bash
|
||||
http://同局域网IP:5201/publish?smsCode=短信验证码
|
||||
|
||||
例如:
|
||||
http://192.168.2.100:5201/publish?smsCode=12345
|
||||
|
||||
同局域网IP会在运行 `./jd_wstool 或 jd_wstool.exe` 时提示出来,例如:
|
||||
listening on http://192.168.2.100:5201
|
||||
```
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
<details><summary>iOS端</summary><br>
|
||||
下载 `爱思助手` 使用实时屏幕,使用QQ截图工具获取左上和右下的xy轴坐标,在config.json内配置
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
### 感谢以下作者的相关项目供我瞎逼逼的机会
|
||||
### 排名不分先后
|
||||
- [@AntonVanke](https://github.com/AntonVanke/JDBrandMember)
|
||||
- [@yqchilde](https://github.com/yqchilde/JDMemberCloseAccount)
|
||||
|
||||
## 结束了
|
||||
### 实在不会Windows用户点击浏览器右上角的`×`,Mac用户点击左上角的红色`小圆点`关闭本教程
|
||||
139
INS/JD/lan-tianxiang/README.md
Normal file
@ -0,0 +1,139 @@
|
||||
<!--
|
||||
[](https://github.com/lan-tianxiang/js_tool)
|
||||
-->
|
||||
|
||||
### 新旧版本同时更新 答疑交流QQ群967451175
|
||||
V3版(原版) https://github.com/lan-tianxiang/jd_shell
|
||||
A1版(较新) https://github.com/lan-tianxiang/js_tool
|
||||
|
||||
|
||||
<p align="center">
|
||||
<img width="100px" src="https://res.cloudinary.com/anuraghazra/image/upload/v1594908242/logo_ccswme.svg" align="center" alt="GitHub Readme Stats" />
|
||||
<h2 align="center">JS SHELL</h2>
|
||||
<p align="center">自动化一键完成JS库管理</p>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/lan-tianxiang/js_tool/blob/master/LICENSE"><img alt="GitHub" src="https://img.shields.io/github/license/lan-tianxiang/js_tool.svg?label=License&style=for-the-badge"></a>
|
||||
<a href="https://github.com/lan-tianxiang/js_tool/issues"><img alt="Issues" src="https://img.shields.io/github/issues/lan-tianxiang/js_tool?color=0088ff&style=for-the-badge" /></a>
|
||||
<a href="https://github.com/lan-tianxiang/js_tool/stargazers"><img alt="GitHub" src="https://img.shields.io/github/stars/lan-tianxiang/js_tool.svg?label=Stars&style=for-the-badge"></a>
|
||||
<br />
|
||||
<br />
|
||||
<a href="https://github.com/lan-tianxiang/">
|
||||
<img src="https://img.shields.io/badge/Supported%20by-Lan%20Tian%20Xiang%20%E2%86%92-gray.svg?colorA=655BE1&colorB=4F44D6&style=for-the-badge"/>
|
||||
</a>
|
||||
<a href="https://github.com/lxk0301">
|
||||
<img src="https://img.shields.io/badge/Supported%20by-LXK%200301%20Scripts%20%E2%86%92-gray.svg?colorA=61c265&colorB=4CAF50&style=for-the-badge"/>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="#demo">查看 Demo</a>
|
||||
·
|
||||
<a href="https://github.com/lan-tianxiang/js_tool/issues/new/choose">报告 Bug</a>
|
||||
·
|
||||
<a href="https://github.com/lan-tianxiang/js_tool/issues/new/choose">请求增加功能</a>
|
||||
</p>
|
||||
</p>
|
||||
<p align="center">喜欢这个项目?请考虑<a href="">捐赠❤</a>来帮助它完善!
|
||||
<br />
|
||||
<h3 align="center">当然,觉得默默关注也是鼓励的话,也可以在右上角给颗⭐!你的支持是我最大的动力😎!</h3>
|
||||
<p>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
</p>
|
||||
|
||||
## 必要声明:
|
||||
* 本仓库发布的SHELL项目,是用于对第三方js库进行自动更新,管理和运行的一体化软件.
|
||||
* 本项目内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。
|
||||
* 本仓库发布的SHELL项目中涉及的任何脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.
|
||||
* 所有使用者在使用SHELL项目的任何部分时,需先遵守法律法规。对于一切使用不当所造成的后果,需自行承担.对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害.
|
||||
* 间接使用SHELL项目的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 本人对于由此引起的任何隐私泄漏或其他后果概不负责.
|
||||
* 如果任何单位或个人认为该项目可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关文件.
|
||||
* 任何以任何方式查看此项目的人或直接或间接使用该SHELL项目的任何脚本的使用者都应仔细阅读此声明。本人保留随时更改或补充此免责声明的权利。一旦使用并复制了任何相关脚本或SHELL项目的规则,则视为您已接受此免责声明.
|
||||
|
||||
**您必须在下载后的24小时内从计算机或手机中完全删除以上内容.** </br>
|
||||
> ***您使用或者复制了本仓库且本人制作的任何脚本,则视为`已接受`此声明,请仔细阅读***
|
||||
|
||||
##### ☣请各位不要传播!!☣
|
||||
|
||||
### 通知
|
||||
- __2021/4/12 24:00 `ALL重要通知`__
|
||||
新版本A1发布,修复所有重大问题,Docker无异常,定时正常。
|
||||
|
||||
|
||||
- __2021/3/30 9:00 `长期`__
|
||||
ㅤ有好用的第三方脚本欢迎提交到https://github.com/lan-tianxiang/jd_scripts
|
||||
|
||||
## 开发行程
|
||||
|
||||
- __2021/4/5 12:00 `完成多账户并发运行任务功能(完成)`__
|
||||
- __2021/4/10 12:00 `对结构优化,减少执行文件(完成)`__
|
||||
- __2021/4/15 12:00 `不知道要更什么功能,你们来提!!!`__
|
||||
- __2021/4/14 12:00 `提前运行功能`__
|
||||
|
||||
## 适用于以下系统
|
||||
|
||||
### 如何部署?
|
||||
|
||||
## `Linux`
|
||||
|
||||
- [Debian/Ubuntu/Armbian/OpenMediaVault等Debian系](https://github.com/lan-tianxiang/js_tool/wiki/Linux) 🔻
|
||||
|
||||
- [CentOS/RedHat/Fedora等红帽系](https://github.com/lan-tianxiang/js_tool/wiki/Linux) 🔻
|
||||
|
||||
- [Android等使用Termux模拟Linux的系统](https://github.com/lan-tianxiang/js_tool/wiki/Android) 🔻
|
||||
|
||||
- [OpenWRT、MacOs等类UNIX系统](https://github.com/lan-tianxiang/js_tool/wiki/Unix) 🔻
|
||||
|
||||
## `Docker` <a href="https://github.com/lan-tianxiang/js_tool/actions"><img alt="Docker Built" src="https://github.com/lan-tianxiang/js_tool/workflows/Built_JS_Tool_To_Docker/badge.svg" /></a>
|
||||
|
||||
- [Docker](https://github.com/lan-tianxiang/js_tool/wiki/Docker) 🔻
|
||||
|
||||
## `Windows10`
|
||||
|
||||
- [Win10安装 WSL Ubuntu](https://github.com/lan-tianxiang/js_tool/wiki/Win10) 🔻
|
||||
|
||||
|
||||
***
|
||||
|
||||
### [WIKI](https://github.com/lan-tianxiang/js_tool/wiki/Instruction) 和各文件注释都含有大量教程,请自行翻阅❗❗
|
||||
|
||||
<details>
|
||||
<summary> </summary>
|
||||
|
||||
##### 小彩蛋
|
||||
|
||||
##### 默认隐藏,欢迎加入交流
|
||||
<!--
|
||||
好家伙!!
|
||||
TG群:t.me/jd_shell
|
||||
QQ群:967451175
|
||||
-->
|
||||
</details>
|
||||
|
||||
|
||||
## 更新日志
|
||||
<details>
|
||||
<summary> </summary>
|
||||
|
||||
> 只记录大的更新,小修小改不记录。
|
||||
|
||||
2021-04-12, 新版本A1发布,修复所有重大问题,Docker无异常,定时正常。
|
||||
|
||||
2021-03-30, 修复Docker遗留的隐藏BUG,保持docker和linux修复脚本的一致
|
||||
|
||||
2021-03-29, 增加超时关闭,以防因网络等未知原因卡住而不断消耗系统资源(默认关闭)
|
||||
|
||||
2021-03-28, 自动配置并填写助力码,在config最后的专区内,无需人工干预(默认关闭)
|
||||
|
||||
2021-02-19,面板功能集成至jd.sh内,运行jd.sh会出现操作提示
|
||||
|
||||
2021-01-23,控制面板增加日志查看功能,Docker重启容器后可以使用`docker restart jd`,非Docker如果是pm2方式的请重启pm2进程`pm2 resatrt server.js`。
|
||||
|
||||
2020-01-21,增加shylocks/Loon脚本。
|
||||
|
||||
2021-01-15,如果本机上安装了pm2,则挂机程序以pm2启动,否则以nohup启动。
|
||||
</details>
|
||||
7
INS/JD/lxk0301/.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
/node_modules/
|
||||
/.idea
|
||||
/.history
|
||||
/box.dat
|
||||
/CookieSet.json
|
||||
/jdCookie.js
|
||||
/logs
|
||||
182
INS/JD/lxk0301/README.md
Normal file
@ -0,0 +1,182 @@
|
||||
# From lxk0301 & zero205
|
||||
|
||||
## 使用教程
|
||||
* > ~~Github Action 运行~~ (响应lxk大佬要求,删除AC教程)
|
||||
* > 腾讯云函数部署。[点此查看](./backUp/tencentscf.md)
|
||||
* > [elecV2P](https://github.com/elecV2/elecV2P) 部署【推荐】。
|
||||
* 安装教程:[点此查看](https://github.com/elecV2/elecV2P-dei/blob/master/docs/01-overview.md)
|
||||
* 相关补充说明:[点此查看](./zero205/elecV2P.md)
|
||||
|
||||
|
||||
### 自动同步脚本教程:[点此查看](https://github.com/Oreomeow/VIPTasks/blob/main/INS/lxk0301/backUp/gitSync.md) </br>
|
||||
|
||||
## 常见问题
|
||||
* 此处借用[RayWangQvQ](https://github.com/RayWangQvQ)大佬的教程
|
||||
* [点击查看常见问题](https://github.com/RayWangQvQ/BiliBiliTool.Docs/blob/main/questions.md)
|
||||
|
||||
## 特别声明:
|
||||
|
||||
* 本仓库发布的Script项目中涉及的任何解锁和解密分析脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.
|
||||
|
||||
* 本项目内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布。
|
||||
|
||||
* lxk0301对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害.
|
||||
|
||||
* 间接使用脚本的任何用户,包括但不限于建立VPS或在某些行为违反国家/地区法律或相关法规的情况下进行传播, lxk0301 对于由此引起的任何隐私泄漏或其他后果概不负责.
|
||||
|
||||
* 请勿将Script项目的任何内容用于商业或非法目的,否则后果自负.
|
||||
|
||||
* 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本.
|
||||
|
||||
* 任何以任何方式查看此项目的人或直接或间接使用该Script项目的任何脚本的使用者都应仔细阅读此声明。lxk0301 保留随时更改或补充此免责声明的权利。一旦使用并复制了任何相关脚本或Script项目的规则,则视为您已接受此免责声明.
|
||||
|
||||
**您必须在下载后的24小时内从计算机或手机中完全删除以上内容.** </br>
|
||||
> ***您使用或者复制了本仓库且本人制作的任何脚本,则视为`已接受`此声明,请仔细阅读***
|
||||
|
||||
## Script脚本列表
|
||||
|
||||
#### 说明
|
||||
|
||||
1. 其中 [jd_bean_sign.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_bean_sign.js) 可N个京东账号,Node.js专用,核心脚本是JD_DailyBonus.js, IOS软件用户请使用NobyDa的 [JD_DailyBonus.js](https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js)
|
||||
|
||||
2. 以字母排序。
|
||||
|
||||
<!-- 这是隐藏信息,用来给 update_list.sh 脚本提供标记信息的,用于自动生成下面的脚本清单,请勿删除这里的标记信息。 -->
|
||||
<!-- 此表格由 update_list.sh 脚本自动生成,请不要人工修改。 -->
|
||||
<!-- 清单标记开始 -->
|
||||
| 序号 | 文件 | 名称 | 活动入口 |
|
||||
| :-: | - | - | - |
|
||||
|1|[jd_bean_change.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_bean_change.js)|京东资产变动通知||
|
||||
|2|[jd_bean_home.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_bean_home.js)|领京豆额外奖励|京东APP首页-领京豆|
|
||||
|3|[jd_bean_sign.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_bean_sign.js)|京东多合一签到|各处的签到汇总|
|
||||
|4|[jd_beauty.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_beauty.js)|美丽研究院|京东app首页-美妆馆-底部中间按钮|
|
||||
|5|[jd_blueCoin.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_blueCoin.js)|东东超市兑换奖品|京东APP我的-更多工具-东东超市|
|
||||
|6|[jd_bookshop.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_bookshop.js)|口袋书店|京东app首页-京东图书-右侧口袋书店|
|
||||
|7|[jd_car.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_car.js)|京东汽车|京东APP首页-京东汽车-屏幕右中部,车主福利|
|
||||
|8|[jd_car_exchange.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_car_exchange.js)|京东汽车兑换|京东APP首页-京东汽车-屏幕右中部,车主福利|
|
||||
|9|[jd_carnivalcity.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_carnivalcity.js)|京东手机狂欢城|暂无 [活动地址](https://carnivalcity.m.jd.com/)|
|
||||
|10|[jd_cash.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_cash.js)|签到领现金|京东APP搜索领现金进入|
|
||||
|11|[jd_cfd.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_cfd.js)|京喜财富岛|京喜APP-我的-京喜财富岛|
|
||||
|12|[jd_city.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_city.js)|城城领现金||
|
||||
|13|[jd_club_lottery.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_club_lottery.js)|摇京豆|京东APP首页-领京豆-摇京豆/京东APP首页-我的-京东会员-摇京豆|
|
||||
|14|[jd_crazy_joy.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_crazy_joy.js)|crazyJoy任务|京东APP我的-更多工具-疯狂的JOY|
|
||||
|15|[jd_crazy_joy_bonus.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_crazy_joy_bonus.js)|监控crazyJoy分红|京东APP我的-更多工具-疯狂的JOY|
|
||||
|16|[jd_crazy_joy_coin.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_crazy_joy_coin.js)|crazyJoy挂机|京东APP我的-更多工具-疯狂的JOY|
|
||||
|17|[jd_daily_egg.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_daily_egg.js)|天天提鹅|京东金融-天天提鹅|
|
||||
|18|[jd_daily_lottery.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_daily_lottery.js)|小鸽有礼-每日抽奖|惊喜-》我的-》寄件服务-》寻味四季-》右侧瓜分千万京豆|
|
||||
|19|[jd_delCoupon.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_delCoupon.js)|删除优惠券|京东APP我的-优惠券|
|
||||
|20|[jd_dreamFactory.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_dreamFactory.js)|京喜工厂|京东APP-游戏与互动-查看更多-京喜工厂|
|
||||
|21|[jd_family.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_family.js)|京东家庭号|玩一玩-家庭号|
|
||||
|22|[jd_fruit.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_fruit.js)|东东农场|京东APP我的-更多工具-东东农场|
|
||||
|23|[jd_get_share_code.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_get_share_code.js)|获取互助码||
|
||||
|24|[jd_gold_creator.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_gold_creator.js)|金榜创造营|[活动地址](https://h5.m.jd.com/babelDiy/Zeus/2H5Ng86mUJLXToEo57qWkJkjFPxw/index.html)|
|
||||
|25|[jd_health.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_health.js)|东东健康社区|京东APP首页搜索 "玩一玩"即可|
|
||||
|26|[jd_health_collect.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_health_collect.js)|东东健康社区收集能量收集|京东APP首页搜索 "玩一玩"即可|
|
||||
|27|[jd_jdfactory.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdfactory.js)|东东工厂|京东APP首页-数码电器-东东工厂|
|
||||
|28|[jd_jdzz.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jdzz.js)|京东赚赚|京东赚赚小程序|
|
||||
|29|[jd_jin_tie.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jin_tie.js)|领金贴|京东APP首页-领金贴,[活动地址](https://active.jd.com/forever/cashback/index/)|
|
||||
|30|[jd_joy.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy.js)|宠汪汪|京东APP我的-更多工具-宠汪汪|
|
||||
|31|[jd_joy_feedPets.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_feedPets.js)|宠汪汪🐕喂食|京东APP我的-更多工具-宠汪汪|
|
||||
|32|[jd_joy_help.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_help.js)|宠汪汪强制为别人助力|京东APP我的-更多工具-宠汪汪|
|
||||
|33|[jd_joy_reward.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_reward.js)|宠汪汪积分兑换奖品|京东APP我的-更多工具-宠汪汪|
|
||||
|34|[jd_joy_run.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_run.js)|宠汪汪赛跑|京东APP我的-更多工具-宠汪汪|
|
||||
|35|[jd_joy_steal.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_joy_steal.js)|宠汪汪偷好友积分与狗粮|京东APP我的-更多工具-宠汪汪|
|
||||
|36|[jd_jump.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jump.js)|跳跳乐瓜分京豆|来客有礼(微信小程序)=>跳跳乐或京东APP=》首页=》母婴馆=》底部中间|
|
||||
|37|[jd_jxnc.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_jxnc.js)|京喜农场|京喜APP我的-京喜农场|
|
||||
|38|[jd_kd.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_kd.js)|京东快递签到|[活动地址](https://jingcai-h5.jd.com/#/)|
|
||||
|39|[jd_live.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_live.js)|京东直播|京东APP首页-京东直播|
|
||||
|40|[jd_live_redrain.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_live_redrain.js)|超级直播间红包雨||
|
||||
|41|[jd_lotteryMachine.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_lotteryMachine.js)|京东抽奖机&内部互助|京东APP中各种抽奖活动的汇总|
|
||||
|42|[jd_market_lottery.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_market_lottery.js)|幸运大转盘|[活动地址](https://pro.m.jd.com/mall/active/3ryu78eKuLyY5YipWWVSeRQEpLQP/index.html)|
|
||||
|43|[jd_moneyTree.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_moneyTree.js)|京东摇钱树|京东APP我的-更多工具-摇钱树,[活动链接](https://uua.jr.jd.com/uc-fe-wxgrowing/moneytree/index/?channel=yxhd)|
|
||||
|44|[jd_ms.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_ms.js)|京东秒秒币|京东app-京东秒杀-签到领红包|
|
||||
|45|[jd_necklace.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_necklace.js)|点点券|京东APP-领券中心/券后9.9-领点点券 [活动地址](https://h5.m.jd.com/babelDiy/Zeus/41Lkp7DumXYCFmPYtU3LTcnTTXTX/index.html)|
|
||||
|46|[jd_nzmh.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_nzmh.js)|女装盲盒抽京豆|京东app-女装馆-赢京豆|
|
||||
|47|[jd_pet.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_pet.js)|东东萌宠|京东APP我的-更多工具-东东萌宠|
|
||||
|48|[jd_pigPet.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_pigPet.js)|金融养猪|京东金融养猪猪|
|
||||
|49|[jd_plantBean.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_plantBean.js)|京东种豆得豆|京东APP我的-更多工具-种豆得豆|
|
||||
|50|[jd_price.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_price.js)|京东保价|京东保价|
|
||||
|51|[jd_rankingList.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_rankingList.js)|京东排行榜|京东APP首页-更多频道-排行榜-悬浮按钮|
|
||||
|52|[jd_redPacket.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_redPacket.js)|京东全民开红包|京东APP首页-领券-锦鲤红包。[活动地址](https://happy.m.jd.com/babelDiy/zjyw/3ugedFa7yA6NhxLN5gw2L3PF9sQC/index.html)|
|
||||
|53|[jd_sgmh.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_sgmh.js)|闪购盲盒|京东APP首页-闪购-闪购盲盒|
|
||||
|54|[jd_shop.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_shop.js)|进店领豆|京东APP首页-领京豆-进店领豆|
|
||||
|55|[jd_small_home.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_small_home.js)|东东小窝|京东APP我的-游戏与更多-东东小窝|
|
||||
|56|[jd_speed.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_speed.js)|✈️天天加速|京东APP我的-更多工具-天天加速|
|
||||
|57|[jd_speed_redpocke.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_speed_redpocke.js)|京东极速版红包|京东极速版-领红包|
|
||||
|58|[jd_speed_sign.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_speed_sign.js)|京东极速版|京东极速版app-现金签到|
|
||||
|59|[jd_superMarket.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_superMarket.js)|东东超市|京东APP首页-京东超市-底部东东超市|
|
||||
|60|[jd_syj.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_syj.js)|赚京豆|赚京豆(微信小程序)-赚京豆-签到领京豆|
|
||||
|61|[jd_unsubscribe.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_unsubscribe.js)|取关京东店铺和商品||
|
||||
|62|[jd_xtg.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_xtg.js)|家电星推官||
|
||||
|63|[jd_xtg_help.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_xtg_help.js)|家电星推官好友互助||
|
||||
|64|[jd_zoo.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_zoo.js)|618动物联萌|京东APP-》搜索 玩一玩-》瓜分20亿|
|
||||
|65|[jx_sign.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jx_sign.js)|京喜签到||
|
||||
<!-- 清单标记结束 -->
|
||||
<!-- 此表格由 update_list.sh 脚本自动生成,请不要人工修改。 -->
|
||||
<!-- 这是隐藏信息,用来给 update_list.sh 脚本提供标记信息的,用于自动生成上面的脚本清单,请勿删除这里的标记信息。 -->
|
||||
|
||||
#### 搬运脚本
|
||||
|
||||
1. 【 [@yangtingxiao](https://github.com/yangtingxiao) 】 京东抽奖机([jd_lotteryMachine.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_lotteryMachine.js))
|
||||
|
||||
2. 【 [@yangtingxiao](https://github.com/yangtingxiao) 】 京东排行榜([jd_rankingList.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_rankingList.js))
|
||||
|
||||
**脚本兼容: [QuantumultX](https://apps.apple.com/us/app/quantumult-x/id1443988620), [Surge](https://apps.apple.com/us/app/surge-4/id1442620678), [Loon](https://apps.apple.com/us/app/loon/id1373567447), 小火箭, JSBox, Node.js**
|
||||
|
||||
## 邀请码互助
|
||||
|
||||
- [获取各类活动互助码脚本 jd_get_share_code.js](https://gitee.com/lxk0301/jd_scripts/raw/master/jd_get_share_code.js)
|
||||
|
||||
- [邀请码使用规范](githubAction.md#互助码类环境变量)(仅限云端)
|
||||
|
||||
## 食用方法
|
||||
|
||||
### 1. Docker
|
||||
|
||||
- [部署方法](./docker)
|
||||
|
||||
- [环境变量集合](./githubAction.md)
|
||||
|
||||
- 获取京东cookie教程可参考:
|
||||
|
||||
+ [浏览器获取京东cookie教程](./backUp/GetJdCookie.md)
|
||||
|
||||
+ [插件获取京东cookie教程](./backUp/GetJdCookie2.md)
|
||||
|
||||
+ 京东APP扫码获取cookie(执行`node getJDCookie.js`即可)
|
||||
|
||||
### 2. iOS代理软件(QuantumultX, Surge, Loon, 小火箭)
|
||||
|
||||
##### BoxJs订阅地址:[lxk0301.boxjs.json](https://gitee.com/lxk0301/jd_scripts/raw/master/lxk0301.boxjs.json)
|
||||
|
||||
##### 获取京东cookie [JD_extra_cookie.js](https://gitee.com/lxk0301/jd_scripts/raw/master/JD_extra_cookie.js)
|
||||
|
||||
##### 订阅链接:
|
||||
|
||||
- Surge:Task&Cookies脚本模块地址: [lxk0301_Task.sgmodule.sgmodule](https://gitee.com/lxk0301/jd_scripts/raw/master/Surge/lxk0301_Task.sgmodule.sgmodule)
|
||||
|
||||
- Loon:Task&Cookies脚本订阅链接: [lxk0301_LoonTask.conf](https://gitee.com/lxk0301/jd_scripts/raw/master/Loon/lxk0301_LoonTask.conf)
|
||||
|
||||
- QuantumultX Task脚本订阅链接: [lxk0301_gallery.json](https://gitee.com/lxk0301/jd_scripts/raw/master/QuantumultX/lxk0301_gallery.json),cookie(重写)订阅链接: [lxk0301_cookies.conf](https://gitee.com/lxk0301/jd_scripts/raw/master/QuantumultX/lxk0301_cookies.conf)
|
||||
|
||||
## 通知频道 [https://t.me/jdfruit](https://t.me/jdfruit)
|
||||
|
||||
## 赞赏码(开发维护不易,请赏杯茶水费)
|
||||
|
||||
<div align=center><img width="250" height="250" src="./icon/thanks.jpg"/></div>
|
||||
|
||||
|
||||
## 特别感谢(排名不分先后):
|
||||
|
||||
|
||||
* [@NobyDa](https://github.com/NobyDa)
|
||||
|
||||
* [@chavyleung](https://github.com/chavyleung)
|
||||
|
||||
* [@liuxiaoyucc](https://github.com/liuxiaoyucc)
|
||||
|
||||
* [@Zero-S1](https://github.com/Zero-S1)
|
||||
|
||||
* [@uniqueque](https://github.com/uniqueque)
|
||||
|
||||
* [@nzw9314](https://github.com/nzw9314)
|
||||
32
INS/JD/lxk0301/backUp/GetJdCookie.md
Normal file
@ -0,0 +1,32 @@
|
||||
## 浏览器获取京东cookie教程
|
||||
|
||||
**以下浏览器都行**
|
||||
|
||||
- Chrome浏览器
|
||||
- 新版Edge浏览器
|
||||
- 国产360,QQ浏览器切换到极速模式
|
||||
|
||||
### 操作步骤
|
||||
|
||||
1. 电脑浏览器打开京东网址 [https://m.jd.com/](https://m.jd.com/)
|
||||
2. 按键盘F12键打开开发者工具,然后点下图中的图标
|
||||

|
||||
3. 此时是未登录状态(使用手机短信验证码登录),如已登录请忽略此步骤
|
||||
- 使用手机短信验证码登录(此方式cookie有效时长大概31天,其他登录方式比较短)
|
||||
4. 登录后,选择Network,有很多链接的话点箭头这里清空下
|
||||

|
||||
5. 然后再点我的,链接就变少了
|
||||

|
||||
6. 点第一个链接(log.gif)进去,找到cookie,复制出来,新建一个TXT文本临时保存一下,下面需要用到
|
||||

|
||||
7. 第六步复制出来的cookie比较长,我们只需要`pt_pin=xxxx;`和 `pt_key=xxxx;`部分的内容即可(注:英文引号`;`是必要的)。可以用下面的脚本,在Chrome浏览器按F12,console里面输入下面脚本按enter回车键
|
||||
```
|
||||
var CV = '单引号里面放第六步拿到的cookie';
|
||||
var CookieValue = CV.match(/pt_pin=.+?;/) + CV.match(/pt_key=.+?;/);
|
||||
copy(CookieValue);
|
||||
```
|
||||
8. 这样子整理出关键的的cookie已经在你的剪贴板上, 可直接粘贴
|
||||
|
||||
9. 如果需获取第二个京东账号的cookie,不要在刚才的浏览器上面退出登录账号一(否则刚才获取的cookie会失效),需另外换一个浏览器(Chrome浏览器 `ctr+shift+n` 打开无痕模式也行),然后继续按上面步骤操作即可
|
||||
|
||||
|
||||
34
INS/JD/lxk0301/backUp/GetJdCookie2.md
Normal file
@ -0,0 +1,34 @@
|
||||
## 浏览器插件获取京东cookie教程
|
||||
> 此教程内容由tg用户@wukongdada提供,特此感谢
|
||||
|
||||
**以下浏览器都行**
|
||||
|
||||
- Chrome浏览器
|
||||
- 新版Edge浏览器(chrome内核)
|
||||
|
||||
### 操作步骤
|
||||
|
||||
1. 电脑浏览器打开京东网址 [https://m.jd.com/](https://m.jd.com/)
|
||||
2. Chrome类浏览器安装EditThisCookie插件
|
||||
- Chrome插件商店搜EditThisCookie, 或者[打开此网站](https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?utm_source=chrome-ntp-icon) 进行安装
|
||||
- 仅使用百分浏览器,谷歌浏览器测试过,其他谷歌类浏览器请自行测试。
|
||||
- 无法登录Chrome插件商店或者打不开网址建议使用edge chrome版。
|
||||
3. edge chrome浏览器安装Cookie Editor插件
|
||||
- [edge插件商店](edge://extensions/)搜Cookie Editor,或[打开以下网址](https://microsoftedge.microsoft.com/addons/detail/cookie-editor/ajfboaconbpkglpfanbmlfgojgndmhmc?hl=zh-CN) 完成插件安装
|
||||
4. 以下是chrome和edge的相关设置截图,输入的网址是 ``jd.com``
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
5. 现在点击回到京东触屏版,再点击EditThisCookie/Cookie Editor,再点击搜索,输入key或pin,如下图所示的pt_key,复制pt_key的value值。此插件可以看到cookie的有效期。
|
||||
|
||||

|
||||
|
||||
6. 按照以下格式形成自己的jd_cookie
|
||||
- `pt_key=复制插件搜索出来的key值;pt_pin=复制插件搜索出来的pin值;` ,后面的英文引号`;`是必须要的
|
||||
- 给一个京东cookie具体示例 `pt_key=jdDC2F833333EFDGTCE5BD4AD1A952D4F4DF84A46052;pt_pin=jd_123456;`
|
||||
|
||||
7. 如果需获取第二个京东账号的cookie,不要在刚才的浏览器上面退出登录账号一(否则刚才获取的cookie会失效),需另外换一个浏览器(Chrome浏览器 `ctr+shift+n` 打开无痕模式也行),然后继续按上面步骤操作即可
|
||||
|
||||
|
||||
19
INS/JD/lxk0301/backUp/TG_PUSH.md
Normal file
@ -0,0 +1,19 @@
|
||||
**TG_PUSH教程**
|
||||
|
||||
利用Telegram机器人推送通知,需要在环境变量填入正确的```TG_BOT_TOKEN```以及```TG_USER_ID```,以下教程简明阐述如何获取token以及UserID
|
||||
|
||||
Ⅰ.首先在Telegram上搜索[BotFather](https://t.me/BotFather)机器人<br>
|
||||
|
||||

|
||||
|
||||
Ⅱ.利用[BotFather](https://t.me/BotFather)创建一个属于自己的通知机器人,按照下图中的1、2、3步骤拿到token,格式形如```10xxx4:AAFcqxxxxgER5uw```。填入```TG_BOT_TOKEN```<br>
|
||||
|
||||
<br>
|
||||
|
||||
**新创建的机器人需要跟它发一条消息来开启对话,否则可能会遇到secret填对了但是收不到消息的情况**<br>
|
||||
|
||||
Ⅲ.再次在Telegram上搜索[getuserIDbot](https://t.me/getuserIDbot)机器人,获取UserID。填入```TG_USER_ID```<br>
|
||||
|
||||

|
||||
|
||||
至此,获取**TG_BOT_TOKEN**以及**TG_USER_ID**的教程结束
|
||||
100
INS/JD/lxk0301/backUp/gitSync.md
Normal file
@ -0,0 +1,100 @@
|
||||
## 保持自己github的forks自动和上游仓库同步的教程
|
||||
- 信息来源于 [https://github.com/wei/pull](https://github.com/wei/pull)
|
||||
- 以下教程仅是出于个人爱好,不保证本教程的完全正确性,最终请以作者 [https://github.com/wei/pull](https://github.com/wei/pull) 的描述为准。
|
||||
- 注:此教程由telegram用户@wukongdada提供
|
||||
### 1、只同步默认分支的教程
|
||||
|
||||
> 当上游的仓库仅有一个默认分支。或者上游仓库有两个分支,我们仅需要同步他的默认分支,其他分支对内容对我们来说无关紧要。
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
a) 登录自己的github账号,另开网页打开 [https://github.com/wei/pull](https://github.com/wei/pull)
|
||||
|
||||
|
||||
|
||||
b) 点击Pull app进行安装。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
c) 安装过程中会让你选择要选择那一种方式,All repositories(就是同步已经frok的仓库以及未来fork的仓库),Only select repositories(仅选择要自己需要同步的仓库,其他fork的仓库不会被同步),根据自己需求选择,实在不知道怎么选择,就选All repositories;点击install,完成安装。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
d) 后续,如果要调整1.c中的选项,打开 [https://github.com/apps/pull](https://github.com/apps/pull) ,点击Configure,输入github密码进入pull的相关设置。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
e) 进入后,找到Repository access,根据自己的需求,重新选择:All repositories(就是同步已经frok的仓库以及未来fork的仓库),Only select repositories(仅选择要自己需要同步的仓库,其他fork的仓库不会被同步),Save后保存生效。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
f) Pull app作者虽然在项目中写道keeps your forks up-to-date with upstream via automated pull requests,但当上游仓库有更改时,自己的仓库会在3个小时内完成与上游的同步,3个小时是Pull app作者说的最长时间。当然也可以通过手动触发同步上游仓库,手动触发方式:`https://pull.git.ci/process/你的GitHub名字/你的仓库名字` (例如:`https://pull.git.ci/process/xxxxx/test` ),手动触发可能会进行人机验证,验证通过后会显示Success。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 2、同步其他分支的教程
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
a) 假设你fork了上游仓库后,你fork后的地址为 `https://github.com/你的仓库名字/test` ,首先设置完成第1部分内容,注意在1.c步骤没有设置全部同步的,要回到1.e步,确认是否设置同步了 `你的仓库名字/test`,如果没有,请添加上。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
b) 在默认分支下添加一个文件。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
c) 复制 ``.github/pull.yml`` 粘贴后看到以下页面,注意github前面的那个.别漏掉了。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
d) 请在https://github.com/wei/pull\#advanced-setup-with-config 页复制代码,
|
||||
|
||||
注意:upstream处要修改为上游仓库作者名字。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
e) 最终的示例如下,假设上游作者是zhangsan,所有的注意点都用红线圈出来了,保存后生效。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
f) Pull app作者虽然在项目中写道keeps your forks up-to-date with upstream via automated pull requests,但当上游仓库有更改时,自己的仓库会在3个小时内完成与上游的同步,3个小时是Pull app作者说的最长时间。当然也可以通过手动触发同步上游仓库,手动触发方式:`https://pull.git.ci/process/你的GitHub名字/你的仓库名字` (例如:`https://pull.git.ci/process/xxxxx/test`),手动触发可能会进行人机验证,验证通过后会显示Success。具体见1.f提供的图片。
|
||||
|
||||
|
||||
|
||||
g) 本人仅测试过forks一个仓库只有2个分支的项目,如果有多个分支,不能保证是否可行,请自行测试,或者是使用本教程第3部分高级玩法。
|
||||
|
||||
### 高级玩法
|
||||
|
||||
>当然,作者还有其他更好的项目用于同步所有分支,例如使用 GitHub actions 进行同步。请参考原作者的项目
|
||||
|
||||
- [https://github.com/wei/git-sync](https://github.com/wei/git-sync)
|
||||
- [https://github.com/repo-sync/github-sync](https://github.com/repo-sync/github-sync)
|
||||
212
INS/JD/lxk0301/backUp/iCloud.md
Normal file
@ -0,0 +1,212 @@
|
||||
## 1.安装 Node.js 环境
|
||||
|
||||
[下载地址](https://nodejs.org/zh-tw/download/ )
|
||||
|
||||
根据自己的操作系统下载
|
||||
|
||||
傻瓜式安装,一直下一步即可。
|
||||
|
||||
|
||||
|
||||
## 2.下载源码
|
||||
|
||||

|
||||
|
||||
点击红框处下载压缩包
|
||||
|
||||
## 3.安装依赖、增加入口文件、增加cookie
|
||||
|
||||
压缩包解压后进入项目文件夹
|
||||
|
||||
- Windows 用户按住 **shift** 点击右键,点击 **在此处打开命令窗口**
|
||||
- Mac 用户通过终端,自行进入该文件夹
|
||||
|
||||
在命令行内输入 `npm i `,等待运行完成。
|
||||
|
||||
此时,项目文件夹内会多出一个 `node_modules`文件夹
|
||||
|
||||
**增加入口文件**
|
||||
|
||||
方案一:同一个仓库下同一个时间,执行多个脚本
|
||||
|
||||
在项目文件夹内新建 `index.js`
|
||||
|
||||
编辑文件
|
||||
|
||||
```javascript
|
||||
'use strict';
|
||||
exports.main_handler = async (event, context, callback) => {
|
||||
//解决云函数热启动问题
|
||||
delete require.cache[require.resolve('./jd_xtg1.js')];
|
||||
require('./jd_xtg1.js') //这里写你想要的脚本
|
||||
require('./jd_xtg2.js') //这里写你想要的脚本
|
||||
require('./jd_xtg3.js') //这里写你想要的脚本
|
||||
}
|
||||
|
||||
```
|
||||
此时,同一时间点下,会同时执行多个脚本,触发器触发后,index.js文件中require()下的所有脚本都会被执行
|
||||
|
||||
**优点**:同一时间下可以同时执行多个脚本,适合脚本种类少的repository,对脚本数量少的repository推荐使用此方案<br>**缺点**:多个脚本不同时间点运行无法满足
|
||||
|
||||
方案二:同一个仓库下不同的时间点,分别执行不同的脚本(类似GitHub Action执行机制)
|
||||
|
||||
在项目文件夹内新建 `index.js`
|
||||
|
||||
编辑文件
|
||||
|
||||
```javascript
|
||||
'use strict';
|
||||
exports.main_handler = async (event, context, callback) => {
|
||||
for (const v of event["Message"].split("\r\n")) {
|
||||
//解决云函数热启动问题
|
||||
delete require.cache[require.resolve(`./${v}.js`)];
|
||||
console.log(v);
|
||||
require(`./${v}.js`)
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
此时触发管理按照下图中进行设置,附加信息选择“是”,内容填写需要传递执行的具体脚本文件名,以回车键换行。触发器触发后,附加信息栏内的脚本会被执行,设置多个不同时间点的触发器达到类似GitHub Action的效果
|
||||
|
||||
**优点**:可以满足个性化需求,同一个repository下只需要设置不同的触发器,可以实现不同时间点分别执行不同的脚本<br>**缺点**:repository下脚本过多,如果需要设置多个触发器,实现个性化运行效果,由于云函数的限制,最多只能设置10个
|
||||
|
||||
[](https://imgchr.com/i/B20KxI)
|
||||
[](https://imgchr.com/i/BRCG0H)
|
||||
|
||||
**注意:**<br>
|
||||
Ⅰ方案一与方案二不能混合到同一个index.js文件中使用,同一个仓库下,二者只能选择其一。<br>
|
||||
Ⅱ感谢[issues#115](https://github.com/LXK9301/jd_scripts/issues/115)中的解决方案,目前云函数连续测试已经可以规避热启动问题了。<br>
|
||||
Ⅲ在确保完全按照本教程设置的情况下测试云函数运行情况,对于部分人运行日志中出现某些脚本运行失败其他正常,并且错误提示带有strict字样的,请自行删除index.js中的```'use strict';```,再做测试<br>
|
||||
|
||||
**增加cookie**
|
||||
|
||||
打开项目文件内的 `jdCookie.js`
|
||||
|
||||
在最上面的 `CookieJDs`里写入 cookie ,多个账号以逗号分隔
|
||||
|
||||
例如
|
||||
|
||||
```javascript
|
||||
let CookieJDs = [
|
||||
'pt_key=xxx;pt_pin=xxx;',
|
||||
'pt_key=zzz;pt_pin=zzz;',
|
||||
'pt_key=aaa;pt_pin=xxxaaa'
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 4.上传至腾讯云
|
||||
|
||||
[腾讯云函数地址]( https://console.cloud.tencent.com/scf/index )
|
||||
|
||||
编写函数
|
||||
|
||||
登录后,点击管理控制台
|
||||
|
||||
单击左侧导航栏**函数服务**,进入“函数服务”页面。
|
||||
在页面上方选择一个地域,最好选择离你常用地区近点的,不至于导致账号异常。单击**新建**。如下图所示:
|
||||
|
||||

|
||||
|
||||
在“新建函数”页面填写函数基础信息,单击**下一步**。如下图所示:
|
||||
|
||||

|
||||
|
||||
**函数名称**:可以自定义,比如为jd。<br>**运行环境**:选择 “Nodejs 12.16”。<br>**创建方式**:选择 “空白函数”。
|
||||
|
||||
确保环境为Nodejs 12.16,执行方法改为:index.main_handler,提交方式建议选本地文件夹,然后从GitHub项目克隆Zip压缩包,解压成文件夹,然后点击这个上传把文件夹上传进来(记得node_modules文件夹一并上传或者将node_modules文件夹上传到“层”,之后选择“函数管理”-“层管理”绑定上传好的层),完了后点击下面的高级设置。
|
||||
|
||||

|
||||
|
||||
内存用不了太大,64MB就够了(64M内存,免费时长6,400,000秒,内存与免费时长大致关系可以参看云函数官方说明),超时时间改为最大的900秒,然后点击最下面的完成。
|
||||
|
||||

|
||||
|
||||
## 5.设置触发器
|
||||
|
||||
点击刚创建的函数
|
||||
|
||||

|
||||
|
||||
点击如图所示
|
||||
|
||||

|
||||
|
||||
创建触发器
|
||||
|
||||

|
||||
|
||||
触发方式默认“**定时触发**”,定时任务名称随便起个名字,触发周期根据自己需要自行设置。
|
||||
|
||||
想进阶使用触发器的自行查看本文中方案一和方案二中的说明
|
||||
|
||||
关于触发周期中的自定义触发周期,使用的是 Cron表达式,这个自行学习下吧
|
||||
|
||||
|
||||
[Corn文档](https://cloud.tencent.com/document/product/583/9708#cron-.E8.A1.A8.E8.BE.BE.E5.BC.8F)
|
||||
|
||||
目前repo中按照每个脚本一个定时器的方式设置到云函数中,大约需要触发器10多个,由于云函数触发器限制最多10个,需要对触发器进行整合,整合后触发器保持在10个以内,以下设置仅供参考<br>
|
||||
|
||||
| **JavaScript** | **脚本名称** | **活动时间** | **原Repository UTC时间** | **适用于云函数的北京时间** | **serverless.yml** |
|
||||
| :----------------------: | :----------------------: | :----------: | :-----------------------: | :-------------------------: | :----------------: |
|
||||
| `jd_bean_change` | 京豆变动通知 | 长期 | 0 2 * * * | 0 1 */1 * * | 30 7 * * * |
|
||||
| `jd_bean_home` | 领京豆额外奖励 | 长期 | / | 0 1 */1 * * | 30 7 * * * |
|
||||
| `jd_bean_sign` | 京豆签到 | 长期 | 0 16 * * * | 0 0 */1 * * | 0 0 * * * |
|
||||
| `jd_blueCoin` | 东东超市兑换奖品 | 长期 | 0 16 * * * | 0 1 */1 * * | 0 0 * * * |
|
||||
| `jd_bookshop` | 口袋书店 | 长期 | / | / | 5 6-18/6,8 * * * |
|
||||
| `jd_car` | 京东汽车 | 长期 | / | 0 0 */1 * * | 0 0 * * * |
|
||||
| `jd_car_exchange` | 京东汽车兑换 | 长期 | / | / | 0 0 * * * |
|
||||
| `jd_club_lottery` | 摇京豆 | 长期 | 0 16 * * * | 0 0 */1 * * | 0 0 * * * |
|
||||
| `jd_crazy_joy` | 疯狂的joy | 长期 | / | / | 30 7 * * * |
|
||||
| `jd_crazy_joy_coin` | 疯狂的joy挂机 | 长期 | / | / | / |
|
||||
| `jd_daily_egg` | 京东金融-天天提额 | 长期 | 10 */3 * * * | 0-12/3 */3 * * * | 8 */3 * * * |
|
||||
| `jd_dreamFactory` | 京喜工厂 | 长期 | / | */30 * * * * | 3 */1 * * * |
|
||||
| `jd_fruit` | 东东农场 | 长期 | 20 23,4,10 * * * | 0,5,10 8,9,12,18,23,0 * * * | 5 6-18/6,8 * * * |
|
||||
| `jd_get_share_code` | 获取互助码 | 长期 | / | / | / |
|
||||
| `jd_jdfactory` | 东东工厂 | 长期 | / | */30 * * * * | 3 */1 * * * |
|
||||
| `jd_jdzz` | 京东赚赚 | 长期 | / | / | 3 1 * * * |
|
||||
| `jd_joy` | 宠汪汪 | 长期 | 0 0,1,4,10,15,16 * * * | 0,5,10 8,9,12,18,23,0 * * * | 3 */1 * * * |
|
||||
| `jd_joy_feedPets` | 宠汪汪单独喂食 | 长期 | */20 */1 * * * | 0-12/3 */3 * * * | 3 */1 * * * |
|
||||
| `jd_joy_help` | 宠汪汪强制为别人助力 | 长期 | / | / | / |
|
||||
| `jd_joy_reward` | 宠汪汪兑换奖品 | 长期 | 0 0,4,8,16 * * * | 0 8,12,16,0 */1 * * | 0 0-16/8,20 * * * |
|
||||
| `jd_joy_run` | 宠汪汪邀请助力与赛跑助力 | 长期 | / | / | / |
|
||||
| `jd_joy_steal` | 宠汪汪偷好友狗粮与积分 | 长期 | 0 16,22 * * * | 0 0,6,20 */1 * * | 0 0-16/8,20 * * * |
|
||||
| `jd_jxnc` | 京喜农场 | 长期 | / | / | / |
|
||||
| `jd_kd` | 京东快递 | 长期 | / | 0 1 */1 * * | 3 1 * * * |
|
||||
| `jd_live` | 京东直播18豆 | 长期 | / | / | 0 0-16/8,20 * * * |
|
||||
| `jd_lotteryMachine` | 京东抽奖机 | 长期 | 11 17 * * * | 0 0 */1 * * | 10 0 * * * |
|
||||
| `jd_moneyTree` | 摇钱树 | 长期 | 40 */3 * * * | 0-12/3 */3 * * * | 3 */1 * * * |
|
||||
| `jd_necklace` | 点点券 | 长期 | / | 0 0,6,20 */1 * * | 0 0-16/8,20 * * * |
|
||||
| `jd_pet` | 东东萌宠 | 长期 | 35 23,4,10 * * * | 0,5,10 8,9,12,18,23,0 * * * | 5 6-18/6,8 * * * |
|
||||
| `jd_petTreasureBox` | 宠汪汪聚宝盆 | 长期 | / | / | / |
|
||||
| `jd_pigPet` | 京东金融-养猪猪 | 长期 | / | 0-12/3 */3 * * * | 3 1 * * * |
|
||||
| `jd_plantBean` | 种豆得豆 | 长期 | 0 23,0-14/1 * * * | 0-12/3 */3 * * * | 3 */1 * * * |
|
||||
| `jd_rankingList` | 京东排行榜 | 长期 | 11 18 * * * | 0 0 */1 * * | 30 7 * * * |
|
||||
| `jd_redPacket` | 全民开红包 | 长期 | 0 17 * * * | 0 1 */1 * * | 10 0 * * * |
|
||||
| `jd_shop` | 进店领豆 | 长期 | 0 16 * * * | 0 0 */1 * * | 10 0 * * * |
|
||||
| `jd_small_home` | 东东小窝 | 长期 | / | 0 0,6,20 */1 * * | 10 0 * * * |
|
||||
| `jd_speed` | 天天加速 | 长期 | 33 */3 * * * | 0-12/3 */3 * * * | 8 */3 * * * |
|
||||
| `jd_superMarket` | 东东超市 | 长期 | 15 * * * * | */30 * * * * | 15 * * * * |
|
||||
| `jd_syj` | 十元街 | 长期 | / | 0 1 */1 * * | 3 1 * * * |
|
||||
| `jd_unbind` | 注销京东会员卡 | 长期 | / | / | 10 0 * * * |
|
||||
| `jd_unsubscribe` | 取关京东店铺和商品 | 长期 | 45 15 * * * | 0 1 */1 * * | 10 0 * * * |
|
||||
| `jd_818` | 京东手机狂欢城 | 短期 | 0 1,4,7,10,12,16,22 * * * | 0 9,12,15,16,20,0,6 */1 * * | / |
|
||||
| `jd_apple_live` | 苹果抽奖机 | 短期 | / | / | / |
|
||||
| `jd_collectProduceScore` | 双十一活动领金币 | 短期 | 30 * * * * | */30 * * * * | / |
|
||||
| `jd_digital_floor` | 数码加购京豆 | 短期 | / | / | / |
|
||||
| `jd_ds` | 京东代属(校园用户) | 短期 | / | / | / |
|
||||
| `jd_health` | 健康抽奖机 | 短期 | / | 0 0 */1 * * | 10 0 * * * |
|
||||
| `jd_jdh` | 京东健康APP | 短期 | / | / | 30 7 * * * |
|
||||
| `jd_jxstory` | 京喜故事 | 短期 | / | / | / |
|
||||
| `jd_live_redrain` | 超级直播间红包雨 | 短期 | / | 0 0,20,9-23/2 * * MON-FRI | / |
|
||||
| `jd_mohe` | 热8超级魔盒 | 短期 | / | / | / |
|
||||
| `jd_ms_redrain` | 秒杀红包雨 | 短期 | / | 0 1 */1 * * | 10 0 * * * |
|
||||
| `jd_pubg` | PUBG | 短期 | / | / | / |
|
||||
| `jd_split` | 金榜年终奖 | 短期 | / | / | / |
|
||||
| `jd_watch` | 发现-看一看 | 短期 | / | / | 3 1 * * * |
|
||||
| `jd_xtg` | 双十一星推官 | 短期 | 0 16 * * * | 0 0 */1 * * | / |
|
||||
| `jr_sign` | 金融打卡年终奖 | 短期 | / | / | 3 1 * * * |
|
||||
|
||||
点击提交,所有流程就结束了。
|
||||
138
INS/JD/lxk0301/backUp/iOS_Weather_AQI_Standard.js
Normal file
138
INS/JD/lxk0301/backUp/tencentscf.md
Normal file
@ -0,0 +1,138 @@
|
||||
|
||||
# 云函数快速部署京东脚本(由于云函数官方升级此方法暂时失效)
|
||||
>
|
||||
> - 本地安装依赖使用serverless部署,[点这里](tencentscf.md#1-安装-nodejs-环境)
|
||||
> - Github Action 部署[点这里](tencentscf.md#github-action-部署)
|
||||
|
||||
## 1. 安装 Node.js 环境
|
||||
|
||||
Node.js 环境 [下载地址](https://nodejs.org/zh-tw/download/) ,根据自己的操作系统下载和安装。
|
||||
|
||||
## 2. 下载代码
|
||||
|
||||
点击红框处下载压缩包
|
||||

|
||||
|
||||
## 3. 安装依赖,配置 cookie
|
||||
|
||||
### 3.1 安装依赖
|
||||
|
||||
压缩包解压后进入项目文件夹
|
||||
|
||||
- Windows 用户按住 **shift** 点击右键,点击 **在此处打开命令窗口**
|
||||
- Mac 用户通过终端,自行进入该文件夹
|
||||
|
||||
在命令行内输入 `npm i `,等待运行完成。
|
||||
|
||||
此时,项目文件夹内会多出一个 `node_modules`文件夹
|
||||
|
||||
### 3.2 配置 cookie
|
||||
|
||||
打开项目文件内的 `jdCookie.js`
|
||||
|
||||
在最上面的 `CookieJDs`里写入 cookie ,多个账号以逗号分隔
|
||||
|
||||
例如
|
||||
|
||||
```javascript
|
||||
let CookieJDs = [
|
||||
'pt_key=xxx;pt_pin=xxx;',
|
||||
'pt_key=zzz;pt_pin=zzz;',
|
||||
'pt_key=aaa;pt_pin=xxxaaa'
|
||||
]
|
||||
```
|
||||
|
||||
> 注:获取京东 cookie 教程参考 [浏览器获取京东cookie教程](https://github.com/LXK9301/jd_scripts/blob/master/backUp/GetJdCookie.md) , [插件获取京东cookie教程](https://github.com/LXK9301/jd_scripts/blob/master/backUp/GetJdCookie2.md)
|
||||
|
||||
|
||||
## 4. 部署到云函数
|
||||
|
||||
### 4.1 开通服务
|
||||
|
||||
依次登录 [SCF 云函数控制台](https://console.cloud.tencent.com/scf) 和 [SLS 控制台](https://console.cloud.tencent.com/sls) 开通相关服务,确保账户下已开通服务并创建相应[服务角色](https://console.cloud.tencent.com/cam/role) **SCF_QcsRole、SLS_QcsRole**
|
||||
|
||||
> 注意!为了确保权限足够,获取这两个参数时不要使用子账户!此外,腾讯云账户需要[实名认证](https://console.cloud.tencent.com/developer/auth)。
|
||||
|
||||
### 4.2 工具部署
|
||||
|
||||
下载 Serverless 工具,快速部署函数
|
||||
```
|
||||
npm install -g serverless
|
||||
```
|
||||
|
||||
执行部署命令
|
||||
```
|
||||
serverless deploy
|
||||
```
|
||||
|
||||
如果已经配置了永久秘钥,则可以直接部署,如果没有,可以直接**微信扫码**登录腾讯云,并且授权部署。
|
||||
|
||||
过几秒后,查看输出,可以看到函数和定时触发器都已经配置完成。
|
||||
```
|
||||
serverless ⚡framework
|
||||
Action: "deploy" - Stage: "dev" - App: "jdscript" - Instance: "jdscript"
|
||||
|
||||
functionName: scf-jdscript
|
||||
description: This is a function in jdscript application.
|
||||
namespace: default
|
||||
runtime: Nodejs12.16
|
||||
handler: index.main_handler
|
||||
memorySize: 64
|
||||
lastVersion: $LATEST
|
||||
traffic: 1
|
||||
triggers:
|
||||
timer:
|
||||
- timer-jdscript-dev
|
||||
|
||||
36s › jdscript › Success
|
||||
```
|
||||
|
||||
## 5. 查看和测试
|
||||
|
||||
登录后,在 [腾讯云函数地址](https://console.cloud.tencent.com/scf/index) 点击管理控制台,查看最新部署的函数。
|
||||
|
||||
在左侧栏的日志查询中,可以查看到触发的日志,包括是否打卡成功等。
|
||||
|
||||

|
||||
|
||||
> 如果需要配置永久秘钥,则可以在[访问秘钥页面](https://console.cloud.tencent.com/cam/capi)获取账号的 TENCENT_SECRET_ID,TENCENT_SECRET_KEY,并配置在代码根目录 .env 文件中。
|
||||
|
||||
|
||||
# Github Action 部署
|
||||
## 1. 开通服务
|
||||
|
||||
依次登录 [SCF 云函数控制台](https://console.cloud.tencent.com/scf) 和 [SLS 控制台](https://console.cloud.tencent.com/sls) 开通相关服务,确保账户下已开通服务并创建相应[服务角色](https://console.cloud.tencent.com/cam/role) **SCF_QcsRole、SLS_QcsRole**
|
||||
|
||||
> 注意!为了确保权限足够,获取这两个参数时不要使用子账户!此外,腾讯云账户需要[实名认证](https://console.cloud.tencent.com/developer/auth)。
|
||||
|
||||
## 2. 在这里新建一个访问密钥[新建密钥](https://console.cloud.tencent.com/cam/capi)
|
||||
> 将SecretId和SecretKey分别配置在仓库的secrets变量里面, TENCENT_SECRET_ID对应你的SecretId的值,TENCENT_SECRET_KEY对应你的SecretKey的值
|
||||
|
||||
## 3. 配置自己需要secrets变量[参考这里](githubAction.md#下方提供使用到的-secrets全集合)
|
||||
|
||||
目前因为云函数改版升级,原GitHub Action部署云函数方案需要作出相应调整,secret变量新增`SCF_REGION`和`TENCENT_FUNCTION_NAME`。`SCF_REGION`用于控制部署区域的选择,具体参数代码填写可以自行查找官方说明 [地域和可用区](https://cloud.tencent.com/document/product/213/6091) `TENCENT_FUNCTION_NAME`用于控制部署到云函数后函数名的命名。<br>
|
||||
|
||||
## 4. 配置index.js中secrets变量说明
|
||||
现在可以通过secret设置自定义index.js中的执行方式,环境变量分别为`TENCENTSCF_SOURCE_TYPE`和`TENCENTSCF_SOURCE_URL`,其中`TENCENTSCF_SOURCE_TYPE`值可以选取`local`、`git`、`custom`具体含义[参考这里](githubAction.md#下方提供使用到的-secrets全集合)。`TENCENTSCF_SOURCE_URL`格式为包含raw的URL,例如:`https://raw.githubusercontent.com/LXK9301/jd_scripts/master/`或`https://gitee.com/lxk0301/jd_scripts/raw/master/`<br>
|
||||
|
||||
|
||||
### __重要的说三遍__
|
||||
### 如果涉及一个变量配置多个值,如多个cookie,多个取消订阅关键字,去掉里面的 *__[空格]()__* 和 __*[换行]()*__ 使用 `&` 连接
|
||||
### 如果涉及一个变量配置多个值,如多个cookie,多个取消订阅关键字,去掉里面的 *__[空格]()__* 和 __*[换行]()*__ 使用 `&` 连接
|
||||
### 如果涉及一个变量配置多个值,如多个cookie,多个取消订阅关键字,去掉里面的 *__[空格]()__* 和 __*[换行]()*__ 使用 `&` 连接
|
||||
> 排查问题第一步先看自己[腾讯云函数](https://console.cloud.tencent.com/scf/list-detail?rid=5&ns=default&id=scf-jdscript)那边的环境变量跟自己在仓库配置的 `secrets` 是否一致
|
||||

|
||||
|
||||
|
||||
## 4.执行action workflow进行部署,workflow未报错即部署成功
|
||||
|
||||
**在执行action workflow进行部署前,先在需要部署的区域下新建一个空函数,名称可以任意,比如:`jd`,此时secret中`TENCENT_FUNCTION_NAME`值也必须是`jd`,保持与云函数的函数名一致,目前部署云函数的策略是覆盖的方式,故而此步骤至关重要。**<br>
|
||||
|
||||

|
||||
## 5. 查看和测试
|
||||
登录后,在 [腾讯云函数地址](https://console.cloud.tencent.com/scf/index) 点击管理控制台,查看最新部署的函数。
|
||||
|
||||
在左侧栏的日志查询中,可以查看到触发的日志,包括是否打卡成功等。
|
||||
|
||||

|
||||
## 6. 设置触发器[看这里](iCloud.md#5设置触发器) 或者看这里的[注释说明](https://github.com/iouAkira/jd_scripts/blob/patch-1/index.js#L4)
|
||||
37
INS/JD/lxk0301/docker/Dockerfile
Normal file
@ -0,0 +1,37 @@
|
||||
FROM node:lts-alpine3.12
|
||||
|
||||
LABEL AUTHOR="none" \
|
||||
VERSION=0.1.4
|
||||
|
||||
ARG KEY="-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn\nNhAAAAAwEAAQAAAQEAvRQk2oQqLB01iVnJKrnI3tTfJyEHzc2ULVor4vBrKKWOum4dbTeT\ndNWL5aS+CJso7scJT3BRq5fYVZcz5ra0MLMdQyFL1DdwurmzkhPYbwcNrJrB8abEPJ8ltS\nMoa0X9ecmSepaQFedZOZ2YeT/6AAXY+cc6xcwyuRVQ2ZJ3YIMBrRuVkF6nYwLyBLFegzhu\nJJeU5o53kfpbTCirwK0h9ZsYwbNbXYbWuJHmtl5tEBf2Hz+5eCkigXRq8EhRZlSnXfhPr2\n32VCb1A/gav2/YEaMPSibuBCzqVMVruP5D625XkxMdBdLqLBGWt7bCas7/zH2bf+q3zac4\nLcIFhkC6XwAAA9BjE3IGYxNyBgAAAAdzc2gtcnNhAAABAQC9FCTahCosHTWJWckqucje1N\n8nIQfNzZQtWivi8GsopY66bh1tN5N01YvlpL4ImyjuxwlPcFGrl9hVlzPmtrQwsx1DIUvU\nN3C6ubOSE9hvBw2smsHxpsQ8nyW1IyhrRf15yZJ6lpAV51k5nZh5P/oABdj5xzrFzDK5FV\nDZkndggwGtG5WQXqdjAvIEsV6DOG4kl5TmjneR+ltMKKvArSH1mxjBs1tdhta4kea2Xm0Q\nF/YfP7l4KSKBdGrwSFFmVKdd+E+vbfZUJvUD+Bq/b9gRow9KJu4ELOpUxWu4/kPrbleTEx\n0F0uosEZa3tsJqzv/MfZt/6rfNpzgtwgWGQLpfAAAAAwEAAQAAAQEAnMKZt22CBWcGHuUI\nytqTNmPoy2kwLim2I0+yOQm43k88oUZwMT+1ilUOEoveXgY+DpGIH4twusI+wt+EUVDC3e\nlyZlixpLV+SeFyhrbbZ1nCtYrtJutroRMVUTNf7GhvucwsHGS9+tr+96y4YDZxkBlJBfVu\nvdUJbLfGe0xamvE114QaZdbmKmtkHaMQJOUC6EFJI4JmSNLJTxNAXKIi3TUrS7HnsO3Xfv\nhDHElzSEewIC1smwLahS6zi2uwP1ih4fGpJJbU6FF/jMvHf/yByHDtdcuacuTcU798qT0q\nAaYlgMd9zrLC1OHMgSDcoz9/NQTi2AXGAdo4N+mnxPTHcQAAAIB5XCz1vYVwJ8bKqBelf1\nw7OlN0QDM4AUdHdzTB/mVrpMmAnCKV20fyA441NzQZe/52fMASUgNT1dQbIWCtDU2v1cP6\ncG8uyhJOK+AaFeDJ6NIk//d7o73HNxR+gCCGacleuZSEU6075Or2HVGHWweRYF9hbmDzZb\nCLw6NsYaP2uAAAAIEA3t1BpGHHek4rXNjl6d2pI9Pyp/PCYM43344J+f6Ndg3kX+y03Mgu\n06o33etzyNuDTslyZzcYUQqPMBuycsEb+o5CZPtNh+1klAVE3aDeHZE5N5HrJW3fkD4EZw\nmOUWnRj1RT2TsLwixB21EHVm7fh8Kys1d2ULw54LVmtv4+O3cAAACBANkw7XZaZ/xObHC9\n1PlT6vyWg9qHAmnjixDhqmXnS5Iu8TaKXhbXZFg8gvLgduGxH/sGwSEB5D6sImyY+DW/OF\nbmIVC4hwDUbCsTMsmTTTgyESwmuQ++JCh6f2Ams1vDKbi+nOVyqRvCrAHtlpaqSfv8hkjK\npBBqa/rO5yyYmeJZAAAAFHJvb3RAbmFzLmV2aW5lLnByZXNzAQIDBAUG\n-----END OPENSSH PRIVATE KEY-----"
|
||||
|
||||
ENV DEFAULT_LIST_FILE=crontab_list.sh \
|
||||
CUSTOM_LIST_MERGE_TYPE=append \
|
||||
COOKIES_LIST=/scripts/logs/cookies.list \
|
||||
REPO_URL=git@gitee.com:lxk0301/jd_scripts.git \
|
||||
REPO_BRANCH=master
|
||||
|
||||
RUN set -ex \
|
||||
&& apk update \
|
||||
&& apk upgrade \
|
||||
&& apk add --no-cache bash tzdata git moreutils curl jq openssh-client \
|
||||
&& rm -rf /var/cache/apk/* \
|
||||
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||||
&& echo "Asia/Shanghai" > /etc/timezone \
|
||||
&& mkdir -p /root/.ssh \
|
||||
&& echo -e $KEY > /root/.ssh/id_rsa \
|
||||
&& chmod 600 /root/.ssh/id_rsa \
|
||||
&& ssh-keyscan gitee.com > /root/.ssh/known_hosts \
|
||||
&& git clone -b $REPO_BRANCH $REPO_URL /scripts \
|
||||
&& cd /scripts \
|
||||
&& mkdir logs \
|
||||
&& npm config set registry https://registry.npm.taobao.org \
|
||||
&& npm install \
|
||||
&& cp /scripts/docker/docker_entrypoint.sh /usr/local/bin \
|
||||
&& chmod +x /usr/local/bin/docker_entrypoint.sh
|
||||
|
||||
WORKDIR /scripts
|
||||
|
||||
ENTRYPOINT ["docker_entrypoint.sh"]
|
||||
|
||||
CMD [ "crond" ]
|
||||
262
INS/JD/lxk0301/docker/Readme.md
Normal file
@ -0,0 +1,262 @@
|
||||

|
||||
### Usage
|
||||
```diff
|
||||
+ 2021-03-21更新 增加bot交互,spnode指令,功能是否开启自动根据你的配置判断,详见 https://gitee.com/lxk0301/jd_docker/pulls/18
|
||||
**bot交互启动前置条件为 配置telegram通知,并且未使用自己代理的 TG_API_HOST**
|
||||
**spnode使用前置条件未启动bot交互** _(后续可能去掉该限制_
|
||||
使用bot交互+spnode后 后续用户的cookie维护更新只需要更新logs/cookies.conf即可
|
||||
使用bot交互+spnode后 后续执行脚本命令请使用spnode否者无法使用logs/cookies.conf的cookies执行脚本,定时任务也将自动替换为spnode命令执行
|
||||
发送/spnode给bot获取可执行脚本的列表,选择对应的按钮执行。(拓展使用:运行指定路径脚本,例:/spnode /scripts/jd_818.js)
|
||||
spnode功能概述示例
|
||||
spnode conc /scripts/jd_bean_change.js 为每个cookie单独执行jd_bean_change脚本(伪并发
|
||||
spnode 1 /scripts/jd_bean_change.js 为logs/cookies.conf文件里面第一行cookie账户单独执行jd_bean_change脚本
|
||||
spnode jd_XXXX /scripts/jd_bean_change.js 为logs/cookies.conf文件里面pt_pin=jd_XXXX的cookie账户单独执行jd_bean_change脚本
|
||||
spnode /scripts/jd_bean_change.js 为logs/cookies.conf所有cookies账户一起执行jd_bean_change脚本
|
||||
|
||||
**请仔细阅读并理解上面的内容,使用bot交互默认开启spnode指令功能功能。**
|
||||
+ 2021-03-9更新 新版docker单容器多账号自动互助
|
||||
+开启方式:docker-compose.yml 中添加环境变量 - ENABLE_AUTO_HELP=true
|
||||
+助力原则:不考虑需要被助力次数与提供助力次数 假设有3个账号,则生成: ”助力码1@助力码2@助力码3&助力码1@助力码2@助力码3&助力码1@助力码2@助力码3“
|
||||
+原理说明:1、定时调用 /scripts/docker/auto_help.sh collect 收集各个活动的助力码,整理、去重、排序、保存到 /scripts/logs/sharecodeCollection.log;
|
||||
2、(由于linux进程限制,父进程无法获取子进程环境变量)在每次脚本运行前,在当前进程先调用 /scripts/docker/auto_help.sh export 把助力码注入到环境变量
|
||||
|
||||
+ 2021-02-21更新 https://gitee.com/lxk0301/jd_scripts仓库被迫私有,老用户重新更新一下镜像:https://hub.docker.com/r/lxk0301/jd_scripts)(docker-compose.yml的REPO_URL记得修改)后续可同步更新jd_script仓库最新脚本
|
||||
+ 2021-02-10更新 docker-compose里面,填写环境变量 SHARE_CODE_FILE=/scripts/logs/sharecode.log, 多账号可实现自己互助(只限sharecode.log日志里面几个活动),注:已停用,请使用2021-03-9更新
|
||||
+ 2021-01-22更新 CUSTOM_LIST_FILE 参数支持远程定时任务列表 (⚠️务必确认列表中的任务在仓库里存在)
|
||||
+ 例1:配置远程crontab_list.sh, 此处借用 shylocks 大佬的定时任务列表, 本仓库不包含列表中的任务代码, 仅作示范
|
||||
+ CUSTOM_LIST_FILE=https://raw.githubusercontent.com/shylocks/Loon/main/docker/crontab_list.sh
|
||||
+
|
||||
+ 例2:配置docker挂载本地定时任务列表, 用法不变, 注意volumes挂载
|
||||
+ volumes:
|
||||
+ - ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
|
||||
+ environment:
|
||||
+ - CUSTOM_LIST_FILE=my_crontab_list.sh
|
||||
|
||||
|
||||
+ 2021-01-21更新 增加 DO_NOT_RUN_SCRIPTS 参数配置不执行的脚本
|
||||
+ 例:DO_NOT_RUN_SCRIPTS=jd_family.js&jd_dreamFactory.js&jd_jxnc.js
|
||||
建议填写完整文件名,不完整的文件名可能导致其他脚本被禁用。
|
||||
例如:“jd_joy”会匹配到“jd_joy_feedPets”、“jd_joy_reward”、“jd_joy_steal”
|
||||
|
||||
+ 2021-01-03更新 增加 CUSTOM_SHELL_FILE 参数配置执行自定义shell脚本
|
||||
+ 例1:配置远程shell脚本, 我自己写了一个shell脚本https://raw.githubusercontent.com/iouAkira/someDockerfile/master/jd_scripts/shell_script_mod.sh 内容很简单下载惊喜农场并添加定时任务
|
||||
+ CUSTOM_SHELL_FILE=https://raw.githubusercontent.com/iouAkira/someDockerfile/master/jd_scripts/shell_script_mod.sh
|
||||
+
|
||||
+ 例2:配置docker挂载本地自定义shell脚本,/scripts/docker/shell_script_mod.sh 为你在docker-compose.yml里面挂载到容器里面绝对路径
|
||||
+ CUSTOM_SHELL_FILE=/scripts/docker/shell_script_mod.sh
|
||||
+
|
||||
+ tip:如果使用远程自定义,请保证网络畅通或者选择合适的国内仓库,例如有部分人的容器里面就下载不到github的raw文件,那就可以把自己的自定义shell写在gitee上,或者换本地挂载
|
||||
+ 如果是 docker 挂载本地,请保证文件挂载进去了,并且配置的是绝对路径。
|
||||
+ 自定义 shell 脚本里面如果要加 crontab 任务请使用 echo 追加到 /scripts/docker/merged_list_file.sh 里面否则不生效
|
||||
+ 注⚠️ 建议无shell能力的不要轻易使用,当然你可以找别人写好适配了这个docker镜像的脚本直接远程配置
|
||||
+ 上面写了这么多如果还看不懂,不建议使用该变量功能。
|
||||
_____
|
||||
! ⚠️⚠️⚠️2020-12-11更新镜像启动方式,虽然兼容旧版的运行启动方式,但是强烈建议更新镜像和配置后使用
|
||||
! 更新后`command:`指令配置不再需要
|
||||
! 更新后可以使用自定义任务文件追加在默任务文件之后,比以前的完全覆盖多一个选择
|
||||
! - 新的自定两个环境变量为 `CUSTOM_LIST_MERGE_TYPE`:自定文件的生效方式可选值为`append`,`overwrite`默认为`append` ; `CUSTOM_LIST_FILE`: 自定义文件的名字
|
||||
! 更新镜像增减镜像更新通知,以后镜像如果更新之后,会通知用户更新
|
||||
```
|
||||
> 推荐使用`docker-compose`所以这里只介绍`docker-compose`使用方式
|
||||
|
||||
|
||||
|
||||
Docker安装
|
||||
|
||||
- 国内一键安装 `sudo curl -sSL https://get.daocloud.io/docker | sh`
|
||||
- 国外一键安装 `sudo curl -sSL get.docker.com | sh`
|
||||
- 北京外国语大学开源软件镜像站 `https://mirrors.bfsu.edu.cn/help/docker-ce/`
|
||||
|
||||
|
||||
docker-compose 安装(群晖`nas docker`自带安装了`docker-compose`)
|
||||
|
||||
```
|
||||
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
```
|
||||
`Ubuntu`用户快速安装`docker-compose`
|
||||
```
|
||||
sudo apt-get update && sudo apt-get install -y python3-pip curl vim git moreutils
|
||||
pip3 install --upgrade pip
|
||||
pip install docker-compose
|
||||
```
|
||||
|
||||
win10用户下载安装[docker desktop](https://www.docker.com/products/docker-desktop)
|
||||
|
||||
通过`docker-compose version`查看`docker-compose`版本,确认是否安装成功。
|
||||
|
||||
|
||||
### 如果需要使用 docker 多个账户独立并发执行定时任务,[参考这里](https://github.com/iouAkira/scripts/blob/patch-1/docker/docker%E5%A4%9A%E8%B4%A6%E6%88%B7%E4%BD%BF%E7%94%A8%E7%8B%AC%E7%AB%8B%E5%AE%B9%E5%99%A8%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.md#%E4%BD%BF%E7%94%A8%E6%AD%A4%E6%96%B9%E5%BC%8F%E8%AF%B7%E5%85%88%E7%90%86%E8%A7%A3%E5%AD%A6%E4%BC%9A%E4%BD%BF%E7%94%A8docker%E5%8A%9E%E6%B3%95%E4%B8%80%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F)
|
||||
|
||||
> 注⚠️:前提先理解学会使用这下面的教程
|
||||
### 创建一个目录`jd_scripts`用于存放备份配置等数据,迁移重装的时候只需要备份整个jd_scripts目录即可
|
||||
需要新建的目录文件结构参考如下:
|
||||
```
|
||||
jd_scripts
|
||||
├── logs
|
||||
│ ├── XXXX.log
|
||||
│ └── XXXX.log
|
||||
├── my_crontab_list.sh
|
||||
└── docker-compose.yml
|
||||
```
|
||||
- `jd_scripts/logs`建一个空文件夹就行
|
||||
- `jd_scripts/docker-compose.yml` 参考内容如下(自己动手能力不行搞不定请使用默认配置):
|
||||
- - [使用默认配置用这个](./example/default.yml)
|
||||
- - [使用自定义任务追加到默认任务之后用这个](./example/custom-append.yml)
|
||||
- - [使用自定义任务覆盖默认任务用这个](./example/custom-overwrite.yml)
|
||||
- - [一次启动多容器并发用这个](./example/multi.yml)
|
||||
- - [使用群晖默认配置用这个](./example/jd_scripts.syno.json)
|
||||
- - [使用群晖自定义任务追加到默认任务之后用这个](./example/jd_scripts.custom-append.syno.json)
|
||||
- - [使用群晖自定义任务覆盖默认任务用这个](./example/jd_scripts.custom-overwrite.syno.json)
|
||||
- `jd_scripts/docker-compose.yml`里面的环境变量(`environment:`)配置[参考这里](../githubAction.md#互助码类环境变量) 和[本文末尾](../docker/Readme.md#docker专属环境变量)
|
||||
|
||||
|
||||
- `jd_scripts/my_crontab_list.sh` 参考内容如下,自己根据需要调整增加删除,不熟悉用户推荐使用[默认配置](./crontab_list.sh)里面的内容:
|
||||
|
||||
```shell
|
||||
# 每3天的23:50分清理一次日志(互助码不清理,proc_file.sh对该文件进行了去重)
|
||||
50 23 */3 * * find /scripts/logs -name '*.log' | grep -v 'sharecode' | xargs rm -rf
|
||||
|
||||
##############短期活动##############
|
||||
# 小鸽有礼2(活动时间:2021年1月28日~2021年2月28日)
|
||||
34 9 * * * node /scripts/jd_xgyl.js >> /scripts/logs/jd_jd_xgyl.log 2>&1
|
||||
|
||||
#女装盲盒 活动时间:2021-2-19至2021-2-25
|
||||
5 7,23 19-25 2 * node /scripts/jd_nzmh.js >> /scripts/logs/jd_nzmh.log 2>&1
|
||||
|
||||
#京东极速版天天领红包 活动时间:2021-1-18至2021-3-3
|
||||
5 0,23 * * * node /scripts/jd_speed_redpocke.js >> /scripts/logs/jd_speed_redpocke.log 2>&1
|
||||
##############长期活动##############
|
||||
# 签到
|
||||
3 0,18 * * * cd /scripts && node jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1
|
||||
# 东东超市兑换奖品
|
||||
0,30 0 * * * node /scripts/jd_blueCoin.js >> /scripts/logs/jd_blueCoin.log 2>&1
|
||||
# 摇京豆
|
||||
0 0 * * * node /scripts/jd_club_lottery.js >> /scripts/logs/jd_club_lottery.log 2>&1
|
||||
# 东东农场
|
||||
5 6-18/6 * * * node /scripts/jd_fruit.js >> /scripts/logs/jd_fruit.log 2>&1
|
||||
# 宠汪汪
|
||||
15 */2 * * * node /scripts/jd_joy.js >> /scripts/logs/jd_joy.log 2>&1
|
||||
# 宠汪汪喂食
|
||||
15 */1 * * * node /scripts/jd_joy_feedPets.js >> /scripts/logs/jd_joy_feedPets.log 2>&1
|
||||
# 宠汪汪偷好友积分与狗粮
|
||||
13 0-21/3 * * * node /scripts/jd_joy_steal.js >> /scripts/logs/jd_joy_steal.log 2>&1
|
||||
# 摇钱树
|
||||
0 */2 * * * node /scripts/jd_moneyTree.js >> /scripts/logs/jd_moneyTree.log 2>&1
|
||||
# 东东萌宠
|
||||
5 6-18/6 * * * node /scripts/jd_pet.js >> /scripts/logs/jd_pet.log 2>&1
|
||||
# 京东种豆得豆
|
||||
0 7-22/1 * * * node /scripts/jd_plantBean.js >> /scripts/logs/jd_plantBean.log 2>&1
|
||||
# 京东全民开红包
|
||||
1 1 * * * node /scripts/jd_redPacket.js >> /scripts/logs/jd_redPacket.log 2>&1
|
||||
# 进店领豆
|
||||
10 0 * * * node /scripts/jd_shop.js >> /scripts/logs/jd_shop.log 2>&1
|
||||
# 京东天天加速
|
||||
8 */3 * * * node /scripts/jd_speed.js >> /scripts/logs/jd_speed.log 2>&1
|
||||
# 东东超市
|
||||
11 1-23/5 * * * node /scripts/jd_superMarket.js >> /scripts/logs/jd_superMarket.log 2>&1
|
||||
# 取关京东店铺商品
|
||||
55 23 * * * node /scripts/jd_unsubscribe.js >> /scripts/logs/jd_unsubscribe.log 2>&1
|
||||
# 京豆变动通知
|
||||
0 10 * * * node /scripts/jd_bean_change.js >> /scripts/logs/jd_bean_change.log 2>&1
|
||||
# 京东抽奖机
|
||||
11 1 * * * node /scripts/jd_lotteryMachine.js >> /scripts/logs/jd_lotteryMachine.log 2>&1
|
||||
# 京东排行榜
|
||||
11 9 * * * node /scripts/jd_rankingList.js >> /scripts/logs/jd_rankingList.log 2>&1
|
||||
# 天天提鹅
|
||||
18 * * * * node /scripts/jd_daily_egg.js >> /scripts/logs/jd_daily_egg.log 2>&1
|
||||
# 金融养猪
|
||||
12 * * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1
|
||||
# 点点券
|
||||
20 0,20 * * * node /scripts/jd_necklace.js >> /scripts/logs/jd_necklace.log 2>&1
|
||||
# 京喜工厂
|
||||
20 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1
|
||||
# 东东小窝
|
||||
16 6,23 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1
|
||||
# 东东工厂
|
||||
36 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1
|
||||
# 十元街
|
||||
36 8,18 * * * node /scripts/jd_syj.js >> /scripts/logs/jd_syj.log 2>&1
|
||||
# 京东快递签到
|
||||
23 1 * * * node /scripts/jd_kd.js >> /scripts/logs/jd_kd.log 2>&1
|
||||
# 京东汽车(签到满500赛点可兑换500京豆)
|
||||
0 0 * * * node /scripts/jd_car.js >> /scripts/logs/jd_car.log 2>&1
|
||||
# 领京豆额外奖励(每日可获得3京豆)
|
||||
33 4 * * * node /scripts/jd_bean_home.js >> /scripts/logs/jd_bean_home.log 2>&1
|
||||
# 微信小程序京东赚赚
|
||||
10 11 * * * node /scripts/jd_jdzz.js >> /scripts/logs/jd_jdzz.log 2>&1
|
||||
# 宠汪汪邀请助力
|
||||
10 9-20/2 * * * node /scripts/jd_joy_run.js >> /scripts/logs/jd_joy_run.log 2>&1
|
||||
# crazyJoy自动每日任务
|
||||
10 7 * * * node /scripts/jd_crazy_joy.js >> /scripts/logs/jd_crazy_joy.log 2>&1
|
||||
# 京东汽车旅程赛点兑换金豆
|
||||
0 0 * * * node /scripts/jd_car_exchange.js >> /scripts/logs/jd_car_exchange.log 2>&1
|
||||
# 导到所有互助码
|
||||
47 7 * * * node /scripts/jd_get_share_code.js >> /scripts/logs/jd_get_share_code.log 2>&1
|
||||
# 口袋书店
|
||||
7 8,12,18 * * * node /scripts/jd_bookshop.js >> /scripts/logs/jd_bookshop.log 2>&1
|
||||
# 京喜农场
|
||||
0 9,12,18 * * * node /scripts/jd_jxnc.js >> /scripts/logs/jd_jxnc.log 2>&1
|
||||
# 签到领现金
|
||||
27 */4 * * * node /scripts/jd_cash.js >> /scripts/logs/jd_cash.log 2>&1
|
||||
# 京喜app签到
|
||||
39 7 * * * node /scripts/jx_sign.js >> /scripts/logs/jx_sign.log 2>&1
|
||||
# 京东家庭号(暂不知最佳cron)
|
||||
# */20 * * * * node /scripts/jd_family.js >> /scripts/logs/jd_family.log 2>&1
|
||||
# 闪购盲盒
|
||||
27 8 * * * node /scripts/jd_sgmh.js >> /scripts/logs/jd_sgmh.log 2>&1
|
||||
# 京东秒秒币
|
||||
10 7 * * * node /scripts/jd_ms.js >> /scripts/logs/jd_ms.log 2>&1
|
||||
#美丽研究院
|
||||
1 7,12,19 * * * node /scripts/jd_beauty.js >> /scripts/logs/jd_beauty.log 2>&1
|
||||
#京东保价
|
||||
1 0,23 * * * node /scripts/jd_price.js >> /scripts/logs/jd_price.log 2>&1
|
||||
#京东极速版签到+赚现金任务
|
||||
1 1,6 * * * node /scripts/jd_speed_sign.js >> /scripts/logs/jd_speed_sign.log 2>&1
|
||||
# 删除优惠券(默认注释,如需要自己开启,如有误删,已删除的券可以在回收站中还原,慎用)
|
||||
#20 9 * * 6 node /scripts/jd_delCoupon.js >> /scripts/logs/jd_delCoupon.log 2>&1
|
||||
```
|
||||
> 定时任务命之后,也就是 `>>` 符号之前加上 `|ts` 可在日志每一行前面显示时间,如下图:
|
||||
> 
|
||||
- 目录文件配置好之后在 `jd_scripts`目录执行。
|
||||
`docker-compose up -d` 启动(修改docker-compose.yml后需要使用此命令使更改生效);
|
||||
`docker-compose logs` 打印日志;
|
||||
`docker-compose logs -f` 打印日志,-f表示跟随日志;
|
||||
`docker logs -f jd_scripts` 和上面两条相比可以显示汉字;
|
||||
`docker-compose pull` 更新镜像;多容器用户推荐使用`docker pull lxk0301/jd_scripts`;
|
||||
`docker-compose stop` 停止容器;
|
||||
`docker-compose restart` 重启容器;
|
||||
`docker-compose down` 停止并删除容器;
|
||||
|
||||
- 你可能会用到的命令
|
||||
|
||||
`docker exec -it jd_scripts /bin/sh -c ". /scripts/docker/auto_help.sh export > /scripts/logs/auto_help_export.log && node /scripts/xxxx.js |ts >> /scripts/logs/xxxx.log 2>&1"` 手动运行一脚本(有自动助力)
|
||||
|
||||
`docker exec -it jd_scripts /bin/sh -c "node /scripts/xxxx.js |ts >> /scripts/logs/xxxx.log 2>&1"` 手动运行一脚本(无自动助力)
|
||||
|
||||
`docker exec -it jd_scripts /bin/sh -c 'env'` 查看设置的环境变量
|
||||
|
||||
`docker exec -it jd_scripts /bin/sh -c 'crontab -l'` 查看已生效的crontab_list定时器任务
|
||||
|
||||
`docker exec -it jd_scripts sh -c "git pull"` 手动更新jd_scripts仓库最新脚本(默认已有每天拉取两次的定时任务,不推荐使用)
|
||||
|
||||
`docker exec -it jd_scripts /bin/sh` 仅进入容器命令
|
||||
|
||||
`rm -rf logs/*.log` 删除logs文件夹里面所有的日志文件(linux)
|
||||
|
||||
- 如果是群晖用户,在docker注册表搜`jd_scripts`,双击下载映像。
|
||||
不需要`docker-compose.yml`,只需建个logs/目录,调整`jd_scripts.syno.json`里面对应的配置值,然后导入json配置新建容器。
|
||||
若要自定义`my_crontab_list.sh`,再建个`my_crontab_list.sh`文件,配置参考`jd_scripts.my_crontab_list.syno.json`。
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### DOCKER专属环境变量
|
||||
|
||||
| Name | 归属 | 属性 | 说明 |
|
||||
| :---------------: | :------------: | :----: | ------------------------------------------------------------ |
|
||||
| `CRZAY_JOY_COIN_ENABLE` | 是否jd_crazy_joy_coin挂机 | 非必须 | `docker-compose.yml`文件下填写`CRZAY_JOY_COIN_ENABLE=Y`表示挂机,`CRZAY_JOY_COIN_ENABLE=N`表不挂机 |
|
||||
| `DO_NOT_RUN_SCRIPTS` | 不执行的脚本 | 非必须 | 例:`docker-compose.yml`文件里面填写`DO_NOT_RUN_SCRIPTS=jd_family.js&jd_dreamFactory.js&jd_jxnc.js`, 建议填写完整脚本名,不完整的文件名可能导致其他脚本被禁用 |
|
||||
| `ENABLE_AUTO_HELP` | 单容器多账号自动互助 | 非必须 | 例:`docker-compose.yml`文件里面填写`ENABLE_AUTO_HELP=true` |
|
||||
134
INS/JD/lxk0301/docker/auto_help.sh
Normal file
@ -0,0 +1,134 @@
|
||||
#set -e
|
||||
|
||||
#日志路径
|
||||
logDir="/scripts/logs"
|
||||
|
||||
# 处理后的log文件
|
||||
logFile=${logDir}/sharecodeCollection.log
|
||||
|
||||
if [ -n "$1" ]; then
|
||||
parameter=${1}
|
||||
else
|
||||
echo "没有参数"
|
||||
fi
|
||||
|
||||
# 收集助力码
|
||||
collectSharecode() {
|
||||
if [ -f ${2} ]; then
|
||||
echo "${1}:清理 ${logFile} 中的旧助力码,收集新助力码"
|
||||
#删除旧助力码
|
||||
sed -i '/'"${1}"'/d' ${logFile}
|
||||
|
||||
sed -n '/'${1}'.*/'p ${2} | sed 's/京东账号/京东账号 /g' | sed 's/(/ (/g' | sed 's/】/】 /g' | awk '{print $4,$5,$6,$7}' | sort -gk2 | awk '!a[$2" "$3]++{print}' >>$logFile
|
||||
else
|
||||
echo "${1}:${2} 文件不存在,不清理 ${logFile} 中的旧助力码"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
# 导出助力码
|
||||
exportSharecode() {
|
||||
if [ -f ${logFile} ]; then
|
||||
#账号数
|
||||
cookiecount=$(echo ${JD_COOKIE} | grep -o pt_key | grep -c pt_key)
|
||||
if [ -f /usr/local/bin/spnode ]; then
|
||||
cookiecount=$(cat "$COOKIES_LIST" | grep -o pt_key | grep -c pt_key)
|
||||
fi
|
||||
echo "cookie个数:${cookiecount}"
|
||||
|
||||
# 单个账号助力码
|
||||
singleSharecode=$(sed -n '/'${1}'.*/'p ${logFile} | awk '{print $4}' | awk '{T=T"@"$1} END {print T}' | awk '{print substr($1,2)}')
|
||||
# | awk '{print $2,$4}' | sort -g | uniq
|
||||
# echo "singleSharecode:${singleSharecode}"
|
||||
|
||||
# 拼接多个账号助力码
|
||||
num=1
|
||||
while [ ${num} -le ${cookiecount} ]; do
|
||||
local allSharecode=${allSharecode}"&"${singleSharecode}
|
||||
num=$(expr $num + 1)
|
||||
done
|
||||
|
||||
allSharecode=$(echo ${allSharecode} | awk '{print substr($1,2)}')
|
||||
|
||||
# echo "${1}:${allSharecode}"
|
||||
|
||||
#判断合成的助力码长度是否大于账号数,不大于,则可知没有助力码
|
||||
if [ ${#allSharecode} -gt ${cookiecount} ]; then
|
||||
echo "${1}:导出助力码"
|
||||
export ${3}=${allSharecode}
|
||||
else
|
||||
echo "${1}:没有助力码,不导出"
|
||||
fi
|
||||
|
||||
else
|
||||
echo "${1}:${logFile} 不存在,不导出助力码"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
#生成助力码
|
||||
autoHelp() {
|
||||
if [ ${parameter} == "collect" ]; then
|
||||
|
||||
# echo "收集助力码"
|
||||
collectSharecode ${1} ${2} ${3}
|
||||
|
||||
elif [ ${parameter} == "export" ]; then
|
||||
|
||||
# echo "导出助力码"
|
||||
exportSharecode ${1} ${2} ${3}
|
||||
fi
|
||||
}
|
||||
|
||||
#日志需要为这种格式才能自动提取
|
||||
#Mar 07 00:15:10 【京东账号1(xxxxxx)的京喜财富岛好友互助码】3B41B250C4A369EE6DCA6834880C0FE0624BAFD83FC03CA26F8DEC7DB95D658C
|
||||
|
||||
#新增自动助力活动格式
|
||||
# autoHelp 关键词 日志路径 变量名
|
||||
|
||||
############# 短期活动 #############
|
||||
|
||||
|
||||
|
||||
############# 长期活动 #############
|
||||
|
||||
#东东农场
|
||||
autoHelp "东东农场好友互助码" "${logDir}/jd_fruit.log" "FRUITSHARECODES"
|
||||
|
||||
#东东萌宠
|
||||
autoHelp "东东萌宠好友互助码" "${logDir}/jd_pet.log" "PETSHARECODES"
|
||||
|
||||
#种豆得豆
|
||||
autoHelp "京东种豆得豆好友互助码" "${logDir}/jd_plantBean.log" "PLANT_BEAN_SHARECODES"
|
||||
|
||||
#京喜工厂
|
||||
autoHelp "京喜工厂好友互助码" "${logDir}/jd_dreamFactory.log" "DREAM_FACTORY_SHARE_CODES"
|
||||
|
||||
#东东工厂
|
||||
autoHelp "东东工厂好友互助码" "${logDir}/jd_jdfactory.log" "DDFACTORY_SHARECODES"
|
||||
|
||||
#crazyJoy
|
||||
autoHelp "crazyJoy任务好友互助码" "${logDir}/jd_crazy_joy.log" "JDJOY_SHARECODES"
|
||||
|
||||
#京喜财福岛
|
||||
autoHelp "京喜财富岛好友互助码" "${logDir}/jd_cfd.log" "JDCFD_SHARECODES"
|
||||
|
||||
#京喜农场
|
||||
autoHelp "京喜农场好友互助码" "${logDir}/jd_jxnc.log" "JXNC_SHARECODES"
|
||||
|
||||
#京东赚赚
|
||||
autoHelp "京东赚赚好友互助码" "${logDir}/jd_jdzz.log" "JDZZ_SHARECODES"
|
||||
|
||||
######### 日志打印格式需调整 #########
|
||||
|
||||
#口袋书店
|
||||
autoHelp "口袋书店好友互助码" "${logDir}/jd_bookshop.log" "BOOKSHOP_SHARECODES"
|
||||
|
||||
#领现金
|
||||
autoHelp "签到领现金好友互助码" "${logDir}/jd_cash.log" "JD_CASH_SHARECODES"
|
||||
|
||||
#闪购盲盒
|
||||
autoHelp "闪购盲盒好友互助码" "${logDir}/jd_sgmh.log" "JDSGMH_SHARECODES"
|
||||
|
||||
#东东健康社区
|
||||
autoHelp "东东健康社区好友互助码" "${logDir}/jd_health.log" "JDHEALTH_SHARECODES"
|
||||
BIN
INS/JD/lxk0301/docker/bot/jd.png
Normal file
|
After Width: | Height: | Size: 7.2 KiB |
1114
INS/JD/lxk0301/docker/bot/jd_bot
Normal file
4
INS/JD/lxk0301/docker/bot/requirements.txt
Normal file
@ -0,0 +1,4 @@
|
||||
python_telegram_bot==13.0
|
||||
requests==2.23.0
|
||||
MyQR==2.3.1
|
||||
telegram==0.0.1
|
||||
13
INS/JD/lxk0301/docker/bot/setup.py
Normal file
@ -0,0 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Author : iouAkira(lof)
|
||||
# @mail : e.akimoto.akira@gmail.com
|
||||
# @CreateTime: 2020-11-02
|
||||
# @UpdateTime: 2021-03-21
|
||||
|
||||
from setuptools import setup
|
||||
|
||||
setup(
|
||||
name='jd-scripts-bot',
|
||||
version='0.2',
|
||||
scripts=['jd_bot', ],
|
||||
)
|
||||
124
INS/JD/lxk0301/docker/crontab_list.sh
Normal file
@ -0,0 +1,124 @@
|
||||
# 每3天的23:50分清理一次日志(互助码不清理,proc_file.sh对该文件进行了去重)
|
||||
50 23 */3 * * find /scripts/logs -name '*.log' | grep -v 'sharecodeCollection' | xargs rm -rf
|
||||
#收集助力码
|
||||
30 * * * * sh +x /scripts/docker/auto_help.sh collect >> /scripts/logs/auto_help_collect.log 2>&1
|
||||
|
||||
##############短期活动##############
|
||||
#女装盲盒 活动时间:2021-04-1到2021-04-31
|
||||
35 1,23 * * * node /scripts/jd_nzmh.js >> /scripts/logs/jd_nzmh.log 2>&1
|
||||
|
||||
|
||||
#京东极速版红包(活动时间:2021-5-5至2021-5-5)
|
||||
45 0,23 * * * node /scripts/jd_speed_redpocke.js >> /scripts/logs/jd_speed_redpocke.log 2>&1
|
||||
|
||||
#超级直播间红包雨(活动时间不定期,出现异常提示请忽略。红包雨期间会正常)
|
||||
1,31 0-23/1 * * * node /scripts/jd_live_redrain.js >> /scripts/logs/jd_live_redrain.log 2>&1
|
||||
|
||||
#5G超级盲盒 活动时间:2021-03-19到2021-04-30
|
||||
10 0,1-23/4 * * * node /scripts/jd_mohe.js >> /scripts/logs/jd_mohe.log 2>&1
|
||||
|
||||
#TCL 活动时间:4.21-5.3日
|
||||
10 0,23 * * * node /scripts/jd_tcl.js >> /scripts/logs/jd_tcl.log 2>&1
|
||||
##############长期活动##############
|
||||
# 签到
|
||||
7 0,17 * * * cd /scripts && node jd_bean_sign.js >> /scripts/logs/jd_bean_sign.log 2>&1
|
||||
# 东东超市兑换奖品
|
||||
0,30 0 * * * node /scripts/jd_blueCoin.js >> /scripts/logs/jd_blueCoin.log 2>&1
|
||||
# 摇京豆
|
||||
6 0,23 * * * node /scripts/jd_club_lottery.js >> /scripts/logs/jd_club_lottery.log 2>&1
|
||||
# 东东农场
|
||||
15 6-18/6 * * * node /scripts/jd_fruit.js >> /scripts/logs/jd_fruit.log 2>&1
|
||||
# 宠汪汪
|
||||
45 */2,23 * * * node /scripts/jd_joy.js >> /scripts/logs/jd_joy.log 2>&1
|
||||
# 宠汪汪积分兑换京豆
|
||||
0 0-16/8 * * * node /scripts/jd_joy_reward.js >> /scripts/logs/jd_joy_reward.log 2>&1
|
||||
# 宠汪汪喂食
|
||||
35 */1 * * * node /scripts/jd_joy_feedPets.js >> /scripts/logs/jd_joy_feedPets.log 2>&1
|
||||
# 宠汪汪邀请助力
|
||||
10 13-20/1 * * * node /scripts/jd_joy_run.js >> /scripts/logs/jd_joy_run.log 2>&1
|
||||
# 摇钱树
|
||||
23 */2 * * * node /scripts/jd_moneyTree.js >> /scripts/logs/jd_moneyTree.log 2>&1
|
||||
# 东东萌宠
|
||||
35 6-18/6 * * * node /scripts/jd_pet.js >> /scripts/logs/jd_pet.log 2>&1
|
||||
# 京东种豆得豆
|
||||
10 7-22/1 * * * node /scripts/jd_plantBean.js >> /scripts/logs/jd_plantBean.log 2>&1
|
||||
# 京东全民开红包
|
||||
12 0-23/4 * * * node /scripts/jd_redPacket.js >> /scripts/logs/jd_redPacket.log 2>&1
|
||||
# 进店领豆
|
||||
6 0 * * * node /scripts/jd_shop.js >> /scripts/logs/jd_shop.log 2>&1
|
||||
# 东东超市
|
||||
31 0,1-23/2 * * * node /scripts/jd_superMarket.js >> /scripts/logs/jd_superMarket.log 2>&1
|
||||
# 取关京东店铺商品
|
||||
45 23 * * * node /scripts/jd_unsubscribe.js >> /scripts/logs/jd_unsubscribe.log 2>&1
|
||||
# 京豆变动通知
|
||||
20 10 * * * node /scripts/jd_bean_change.js >> /scripts/logs/jd_bean_change.log 2>&1
|
||||
# 京东抽奖机
|
||||
0 0,12,23 * * * node /scripts/jd_lotteryMachine.js >> /scripts/logs/jd_lotteryMachine.log 2>&1
|
||||
# 京东排行榜
|
||||
21 9 * * * node /scripts/jd_rankingList.js >> /scripts/logs/jd_rankingList.log 2>&1
|
||||
# 天天提鹅
|
||||
28 * * * * node /scripts/jd_daily_egg.js >> /scripts/logs/jd_daily_egg.log 2>&1
|
||||
# 金融养猪
|
||||
32 0-23/6 * * * node /scripts/jd_pigPet.js >> /scripts/logs/jd_pigPet.log 2>&1
|
||||
# 点点券
|
||||
40 0,20 * * * node /scripts/jd_necklace.js >> /scripts/logs/jd_necklace.log 2>&1
|
||||
# 京喜工厂
|
||||
50 * * * * node /scripts/jd_dreamFactory.js >> /scripts/logs/jd_dreamFactory.log 2>&1
|
||||
# 东东小窝
|
||||
46 6,23 * * * node /scripts/jd_small_home.js >> /scripts/logs/jd_small_home.log 2>&1
|
||||
# 东东工厂
|
||||
26 * * * * node /scripts/jd_jdfactory.js >> /scripts/logs/jd_jdfactory.log 2>&1
|
||||
# 赚京豆(微信小程序)
|
||||
12 0,18,23 * * * node /scripts/jd_syj.js >> /scripts/logs/jd_syj.log 2>&1
|
||||
# 京东快递签到
|
||||
47 1 * * * node /scripts/jd_kd.js >> /scripts/logs/jd_kd.log 2>&1
|
||||
# 京东汽车(签到满500赛点可兑换500京豆)
|
||||
0 0 * * * node /scripts/jd_car.js >> /scripts/logs/jd_car.log 2>&1
|
||||
# 领京豆额外奖励(每日可获得3京豆)
|
||||
23 4 * * * node /scripts/jd_bean_home.js >> /scripts/logs/jd_bean_home.log 2>&1
|
||||
# 微信小程序京东赚赚
|
||||
6 0-5/1,11 * * * node /scripts/jd_jdzz.js >> /scripts/logs/jd_jdzz.log 2>&1
|
||||
# crazyJoy自动每日任务
|
||||
30 7,23 * * * node /scripts/jd_crazy_joy.js >> /scripts/logs/jd_crazy_joy.log 2>&1
|
||||
# 京东汽车旅程赛点兑换金豆
|
||||
0 0 * * * node /scripts/jd_car_exchange.js >> /scripts/logs/jd_car_exchange.log 2>&1
|
||||
# 导到所有互助码
|
||||
23 7 * * * node /scripts/jd_get_share_code.js >> /scripts/logs/jd_get_share_code.log 2>&1
|
||||
# 口袋书店
|
||||
38 8,12,18 * * * node /scripts/jd_bookshop.js >> /scripts/logs/jd_bookshop.log 2>&1
|
||||
# 京喜农场
|
||||
30 9,12,18 * * * node /scripts/jd_jxnc.js >> /scripts/logs/jd_jxnc.log 2>&1
|
||||
# 签到领现金
|
||||
10 */4 * * * node /scripts/jd_cash.js >> /scripts/logs/jd_cash.log 2>&1
|
||||
# 京喜app签到
|
||||
29 7 * * * node /scripts/jx_sign.js >> /scripts/logs/jx_sign.log 2>&1
|
||||
# 闪购盲盒
|
||||
47 8 * * * node /scripts/jd_sgmh.js >> /scripts/logs/jd_sgmh.log 2>&1
|
||||
# 京东秒秒币
|
||||
10 6 * * * node /scripts/jd_ms.js >> /scripts/logs/jd_ms.log 2>&1
|
||||
#美丽研究院
|
||||
41 7,12,19 * * * node /scripts/jd_beauty.js >> /scripts/logs/jd_beauty.log 2>&1
|
||||
#京东保价
|
||||
#41 0,23 * * * node /scripts/jd_price.js >> /scripts/logs/jd_price.log 2>&1
|
||||
#京东极速版签到+赚现金任务
|
||||
21 1,6 * * * node /scripts/jd_speed_sign.js >> /scripts/logs/jd_speed_sign.log 2>&1
|
||||
#监控crazyJoy分红
|
||||
10 12 * * * node /scripts/jd_crazy_joy_bonus.js >> /scripts/logs/jd_crazy_joy_bonus.log 2>&1
|
||||
#京喜财富岛
|
||||
5 */2 * * * node /scripts/jd_cfd.js >> /scripts/logs/jd_cfd.log 2>&1
|
||||
# 删除优惠券(默认注释,如需要自己开启,如有误删,已删除的券可以在回收站中还原,慎用)
|
||||
#20 9 * * 6 node /scripts/jd_delCoupon.js >> /scripts/logs/jd_delCoupon.log 2>&1
|
||||
#家庭号
|
||||
10 6,7 * * * node /scripts/jd_family.js >> /scripts/logs/jd_family.log 2>&1
|
||||
#京东直播(又回来了)
|
||||
30-50/5 12,23 * * * node /scripts/jd_live.js >> /scripts/logs/jd_live.log 2>&1
|
||||
#京小兑
|
||||
13 8,16,20 * * * node /scripts/jd_jxd.js >> /scripts/logs/jd_jxd.log 2>&1
|
||||
#京东健康社区
|
||||
13 1,6,22 * * * node /scripts/jd_health.js >> /scripts/logs/jd_health.log 2>&1
|
||||
#京东健康社区收集健康能量
|
||||
5-45/20 * * * * node /scripts/jd_health_collect.js >> /scripts/logs/jd_health_collect.log 2>&1
|
||||
# 幸运大转盘
|
||||
10 10,23 * * * node /scripts/jd_market_lottery.js >> /scripts/logs/jd_market_lottery.log 2>&1
|
||||
# 领金贴
|
||||
5 0 * * * node /scripts/jd_jin_tie.js >> /scripts/logs/jd_jin_tie.log 2>&1
|
||||
252
INS/JD/lxk0301/docker/default_task.sh
Normal file
@ -0,0 +1,252 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
# 放在这个初始化python3环境,目的减小镜像体积,一些不需要使用bot交互的用户可以不用拉体积比较大的镜像
|
||||
# 在这个任务里面还有初始化还有目的就是为了方便bot更新了新功能的话只需要重启容器就完成更新
|
||||
function initPythonEnv() {
|
||||
echo "开始安装运行jd_bot需要的python环境及依赖..."
|
||||
apk add --update python3-dev py3-pip py3-cryptography py3-numpy py-pillow
|
||||
echo "开始安装jd_bot依赖..."
|
||||
#测试
|
||||
#cd /jd_docker/docker/bot
|
||||
#合并
|
||||
cd /scripts/docker/bot
|
||||
pip3 install --upgrade pip
|
||||
pip3 install -r requirements.txt
|
||||
python3 setup.py install
|
||||
}
|
||||
|
||||
#启动tg bot交互前置条件成立,开始安装配置环境
|
||||
if [ "$1" == "True" ]; then
|
||||
initPythonEnv
|
||||
if [ -z "$DISABLE_SPNODE" ]; then
|
||||
echo "增加命令组合spnode ,使用该命令spnode jd_xxxx.js 执行js脚本会读取cookies.conf里面的jd cokie账号来执行脚本"
|
||||
(
|
||||
cat <<EOF
|
||||
#!/bin/sh
|
||||
set -e
|
||||
first=\$1
|
||||
cmd=\$*
|
||||
echo \${cmd/\$1/}
|
||||
if [ \$1 == "conc" ]; then
|
||||
for job in \$(cat \$COOKIES_LIST | grep -v "#" | paste -s -d ' '); do
|
||||
{ export JD_COOKIE=\$job && node \${cmd/\$1/}
|
||||
}&
|
||||
done
|
||||
elif [ -n "\$(echo \$first | sed -n "/^[0-9]\+\$/p")" ]; then
|
||||
echo "\$(echo \$first | sed -n "/^[0-9]\+\$/p")"
|
||||
{ export JD_COOKIE=\$(sed -n "\${first}p" \$COOKIES_LIST) && node \${cmd/\$1/}
|
||||
}&
|
||||
elif [ -n "\$(cat \$COOKIES_LIST | grep "pt_pin=\$first")" ];then
|
||||
echo "\$(cat \$COOKIES_LIST | grep "pt_pin=\$first")"
|
||||
{ export JD_COOKIE=\$(cat \$COOKIES_LIST | grep "pt_pin=\$first") && node \${cmd/\$1/}
|
||||
}&
|
||||
else
|
||||
{ export JD_COOKIE=\$(cat \$COOKIES_LIST | grep -v "#" | paste -s -d '&') && node \$*
|
||||
}&
|
||||
fi
|
||||
EOF
|
||||
) >/usr/local/bin/spnode
|
||||
chmod +x /usr/local/bin/spnode
|
||||
fi
|
||||
|
||||
echo "spnode需要使用的到,cookie写入文件,该文件同时也为jd_bot扫码获自动取cookies服务"
|
||||
if [ -z "$JD_COOKIE" ]; then
|
||||
if [ ! -f "$COOKIES_LIST" ]; then
|
||||
echo "" >"$COOKIES_LIST"
|
||||
echo "未配置JD_COOKIE环境变量,$COOKIES_LIST文件已生成,请将cookies写入$COOKIES_LIST文件,格式每个Cookie一行"
|
||||
fi
|
||||
else
|
||||
if [ -f "$COOKIES_LIST" ]; then
|
||||
echo "cookies.conf文件已经存在跳过,如果需要更新cookie请修改$COOKIES_LIST文件内容"
|
||||
else
|
||||
echo "环境变量 cookies写入$COOKIES_LIST文件,如果需要更新cookie请修改cookies.conf文件内容"
|
||||
echo $JD_COOKIE | sed "s/[ &]/\\n/g" | sed "/^$/d" >$COOKIES_LIST
|
||||
fi
|
||||
fi
|
||||
|
||||
CODE_GEN_CONF=/scripts/logs/code_gen_conf.list
|
||||
echo "生成互助消息需要使用的到的 logs/code_gen_conf.list 文件,后续需要自己根据说明维护更新删除..."
|
||||
if [ ! -f "$CODE_GEN_CONF" ]; then
|
||||
(
|
||||
cat <<EOF
|
||||
#格式为
|
||||
#互助类型-机器人ID-提交代码(根据bot作者配置得来)-活动脚本日志文件名-活动代码(根据bot作者配置得来)-查找互助码需要用到的定位字符串
|
||||
#长期活动示例
|
||||
#long-@TuringLabbot-jd_sgmh.log-sgmh-暂无
|
||||
#临时活动示例
|
||||
#temp-@TuringLabbot-jd_sgmh.log-sgmh-暂无
|
||||
#每天变化活动示例
|
||||
#daily-@TuringLabbot-jd_818.log-818-暂无
|
||||
|
||||
#种豆得豆
|
||||
long-@TuringLabbot-/submit_activity_codes-jd_plantBean.log-bean-种豆得豆好友互助码】
|
||||
#京东农场
|
||||
long-@TuringLabbot-/submit_activity_codes-jd_fruit.log-farm-东东农场好友互助码】
|
||||
#京东萌宠
|
||||
long-@TuringLabbot-/submit_activity_codes-jd_pet.log-pet-东东萌宠好友互助码】
|
||||
#东东工厂
|
||||
long-@TuringLabbot-/submit_activity_codes-jd_jdfactory.log-ddfactory-东东工厂好友互助码】
|
||||
#京喜工厂
|
||||
long-@TuringLabbot-/submit_activity_codes-jd_dreamFactory.log-jxfactory-京喜工厂好友互助码】
|
||||
#临时活动
|
||||
temp-@TuringLabbot-/submit_activity_codes-jd_sgmh.log-sgmh-您的好友助力码为:
|
||||
#临时活动
|
||||
temp-@TuringLabbot-/submit_activity_codes-jd_cfd.log-jxcfd-主】你的互助码:
|
||||
temp-@TuringLabbot-/submit_activity_codes-jd_global.log-jdglobal-好友助力码为
|
||||
|
||||
#分红狗活动
|
||||
long-@LvanLamCommitCodeBot-/jdcrazyjoy-jd_crazy_joy.log-@N-crazyJoy任务好友互助码】
|
||||
#签到领现金
|
||||
long-@LvanLamCommitCodeBot-/jdcash-jd_cash.log-@N-您的助力码为
|
||||
#京东赚赚
|
||||
long-@LvanLamCommitCodeBot-/jdzz-jd_jdzz.log-@N-京东赚赚好友互助码】
|
||||
EOF
|
||||
) >$CODE_GEN_CONF
|
||||
else
|
||||
echo "logs/code_gen_conf.list 文件已经存在跳过初始化操作"
|
||||
fi
|
||||
|
||||
echo "容器jd_bot交互所需环境已配置安装已完成..."
|
||||
curl -sX POST "https://api.telegram.org/bot$TG_BOT_TOKEN/sendMessage" -d "chat_id=$TG_USER_ID&text=恭喜🎉你获得feature容器jd_bot交互所需环境已配置安装已完成,并启用。请发送 /help 查看使用帮助。如需禁用请在docker-compose.yml配置 DISABLE_BOT_COMMAND=True" >>/dev/null
|
||||
|
||||
fi
|
||||
|
||||
#echo "暂停更新配置,不要尝试删掉这个文件,你的容器可能会起不来"
|
||||
#echo '' >/scripts/logs/pull.lock
|
||||
|
||||
echo "定义定时任务合并处理用到的文件路径..."
|
||||
defaultListFile="/scripts/docker/$DEFAULT_LIST_FILE"
|
||||
echo "默认文件定时任务文件路径为 ${defaultListFile}"
|
||||
mergedListFile="/scripts/docker/merged_list_file.sh"
|
||||
echo "合并后定时任务文件路径为 ${mergedListFile}"
|
||||
|
||||
echo "第1步将默认定时任务列表添加到并后定时任务文件..."
|
||||
cat $defaultListFile >$mergedListFile
|
||||
|
||||
echo "第2步判断是否存在自定义任务任务列表并追加..."
|
||||
if [ $CUSTOM_LIST_FILE ]; then
|
||||
echo "您配置了自定义任务文件:$CUSTOM_LIST_FILE,自定义任务类型为:$CUSTOM_LIST_MERGE_TYPE..."
|
||||
# 无论远程还是本地挂载, 均复制到 $customListFile
|
||||
customListFile="/scripts/docker/custom_list_file.sh"
|
||||
echo "自定义定时任务文件临时工作路径为 ${customListFile}"
|
||||
if expr "$CUSTOM_LIST_FILE" : 'http.*' &>/dev/null; then
|
||||
echo "自定义任务文件为远程脚本,开始下载自定义远程任务。"
|
||||
wget -O $customListFile $CUSTOM_LIST_FILE
|
||||
echo "下载完成..."
|
||||
elif [ -f /scripts/docker/$CUSTOM_LIST_FILE ]; then
|
||||
echo "自定义任务文件为本地挂载。"
|
||||
cp /scripts/docker/$CUSTOM_LIST_FILE $customListFile
|
||||
fi
|
||||
|
||||
if [ -f "$customListFile" ]; then
|
||||
if [ $CUSTOM_LIST_MERGE_TYPE == "append" ]; then
|
||||
echo "合并默认定时任务文件:$DEFAULT_LIST_FILE 和 自定义定时任务文件:$CUSTOM_LIST_FILE"
|
||||
echo -e "" >>$mergedListFile
|
||||
cat $customListFile >>$mergedListFile
|
||||
elif [ $CUSTOM_LIST_MERGE_TYPE == "overwrite" ]; then
|
||||
echo "配置了自定义任务文件:$CUSTOM_LIST_FILE,自定义任务类型为:$CUSTOM_LIST_MERGE_TYPE..."
|
||||
cat $customListFile >$mergedListFile
|
||||
else
|
||||
echo "配置配置了错误的自定义定时任务类型:$CUSTOM_LIST_MERGE_TYPE,自定义任务类型为只能为append或者overwrite..."
|
||||
fi
|
||||
else
|
||||
echo "配置的自定义任务文件:$CUSTOM_LIST_FILE未找到,使用默认配置$DEFAULT_LIST_FILE..."
|
||||
fi
|
||||
else
|
||||
echo "当前只使用了默认定时任务文件 $DEFAULT_LIST_FILE ..."
|
||||
fi
|
||||
|
||||
echo "第3步判断是否配置了随机延迟参数..."
|
||||
if [ $RANDOM_DELAY_MAX ]; then
|
||||
if [ $RANDOM_DELAY_MAX -ge 1 ]; then
|
||||
echo "已设置随机延迟为 $RANDOM_DELAY_MAX , 设置延迟任务中..."
|
||||
sed -i "/\(jd_bean_sign.js\|jd_blueCoin.js\|jd_joy_reward.js\|jd_joy_steal.js\|jd_joy_feedPets.js\|jd_car_exchange.js\)/!s/node/sleep \$((RANDOM % \$RANDOM_DELAY_MAX)); node/g" $mergedListFile
|
||||
fi
|
||||
else
|
||||
echo "未配置随机延迟对应的环境变量,故不设置延迟任务..."
|
||||
fi
|
||||
|
||||
echo "第4步判断是否配置自定义shell执行脚本..."
|
||||
if [ 0"$CUSTOM_SHELL_FILE" = "0" ]; then
|
||||
echo "未配置自定shell脚本文件,跳过执行。"
|
||||
else
|
||||
if expr "$CUSTOM_SHELL_FILE" : 'http.*' &>/dev/null; then
|
||||
echo "自定义shell脚本为远程脚本,开始下载自定义远程脚本。"
|
||||
wget -O /scripts/docker/shell_script_mod.sh $CUSTOM_SHELL_FILE
|
||||
echo "下载完成,开始执行..."
|
||||
echo "#远程自定义shell脚本追加定时任务" >>$mergedListFile
|
||||
sh -x /scripts/docker/shell_script_mod.sh
|
||||
echo "自定义远程shell脚本下载并执行结束。"
|
||||
else
|
||||
if [ ! -f $CUSTOM_SHELL_FILE ]; then
|
||||
echo "自定义shell脚本为docker挂载脚本文件,但是指定挂载文件不存在,跳过执行。"
|
||||
else
|
||||
echo "docker挂载的自定shell脚本,开始执行..."
|
||||
echo "#docker挂载自定义shell脚本追加定时任务" >>$mergedListFile
|
||||
sh -x $CUSTOM_SHELL_FILE
|
||||
echo "docker挂载的自定shell脚本,执行结束。"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "第5步删除不运行的脚本任务..."
|
||||
if [ $DO_NOT_RUN_SCRIPTS ]; then
|
||||
echo "您配置了不运行的脚本:$DO_NOT_RUN_SCRIPTS"
|
||||
arr=${DO_NOT_RUN_SCRIPTS//&/ }
|
||||
for item in $arr; do
|
||||
sed -ie '/'"${item}"'/d' ${mergedListFile}
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
echo "第6步设定下次运行docker_entrypoint.sh时间..."
|
||||
echo "删除原有docker_entrypoint.sh任务"
|
||||
sed -ie '/'docker_entrypoint.sh'/d' ${mergedListFile}
|
||||
|
||||
# 12:00前生成12:00后的cron,12:00后生成第二天12:00前的cron,一天只更新两次代码
|
||||
if [ $(date +%-H) -lt 12 ]; then
|
||||
random_h=$(($RANDOM % 12 + 12))
|
||||
else
|
||||
random_h=$(($RANDOM % 12))
|
||||
fi
|
||||
random_m=$(($RANDOM % 60))
|
||||
|
||||
echo "设定 docker_entrypoint.sh cron为:"
|
||||
echo -e "\n# 必须要的默认定时任务请勿删除" >>$mergedListFile
|
||||
echo -e "${random_m} ${random_h} * * * docker_entrypoint.sh >> /scripts/logs/default_task.log 2>&1" | tee -a $mergedListFile
|
||||
|
||||
echo "第7步 自动助力"
|
||||
if [ -n "$ENABLE_AUTO_HELP" ]; then
|
||||
#直接判断变量,如果未配置,会导致sh抛出一个错误,所以加了上面一层
|
||||
if [ "$ENABLE_AUTO_HELP" = "true" ]; then
|
||||
echo "开启自动助力"
|
||||
#在所有脚本执行前,先执行助力码导出
|
||||
sed -i 's/node/ . \/scripts\/docker\/auto_help.sh export > \/scripts\/logs\/auto_help_export.log \&\& node /g' ${mergedListFile}
|
||||
else
|
||||
echo "未开启自动助力"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "第8步增加 |ts 任务日志输出时间戳..."
|
||||
sed -i "/\( ts\| |ts\|| ts\)/!s/>>/\|ts >>/g" $mergedListFile
|
||||
|
||||
echo "第9步执行proc_file.sh脚本任务..."
|
||||
sh /scripts/docker/proc_file.sh
|
||||
|
||||
echo "第10步加载最新的定时任务文件..."
|
||||
if [[ -f /usr/bin/jd_bot && -z "$DISABLE_SPNODE" ]]; then
|
||||
echo "bot交互与spnode 前置条件成立,替换任务列表的node指令为spnode"
|
||||
sed -i "s/ node / spnode /g" $mergedListFile
|
||||
#conc每个cookies独立并行执行脚本示例,cookies数量多使用该功能可能导致内存爆掉,默认不开启 有需求,请在自定义shell里面实现
|
||||
#sed -i "/\(jd_xtg.js\|jd_car_exchange.js\)/s/spnode/spnode conc/g" $mergedListFile
|
||||
fi
|
||||
crontab $mergedListFile
|
||||
|
||||
echo "第11步将仓库的docker_entrypoint.sh脚本更新至系统/usr/local/bin/docker_entrypoint.sh内..."
|
||||
cat /scripts/docker/docker_entrypoint.sh >/usr/local/bin/docker_entrypoint.sh
|
||||
|
||||
echo "发送通知"
|
||||
export NOTIFY_CONTENT="升级容器内部node版本(v14.5.0)"
|
||||
cd /scripts/docker
|
||||
node notify_docker_user.js
|
||||
57
INS/JD/lxk0301/docker/docker_entrypoint.sh
Normal file
@ -0,0 +1,57 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
#获取配置的自定义参数
|
||||
if [ -n "$1" ]; then
|
||||
run_cmd=$1
|
||||
fi
|
||||
|
||||
(
|
||||
if [ -f "/scripts/logs/pull.lock" ]; then
|
||||
echo "存在更新锁定文件,跳过git pull操作..."
|
||||
else
|
||||
echo "设定远程仓库地址..."
|
||||
cd /scripts
|
||||
git remote set-url origin "$REPO_URL"
|
||||
git reset --hard
|
||||
echo "git pull拉取最新代码..."
|
||||
git -C /scripts pull --rebase
|
||||
echo "npm install 安装最新依赖"
|
||||
npm install --prefix /scripts
|
||||
fi
|
||||
) || exit 0
|
||||
|
||||
# 默认启动telegram交互机器人的条件
|
||||
# 确认容器启动时调用的docker_entrypoint.sh
|
||||
# 必须配置TG_BOT_TOKEN、TG_USER_ID,
|
||||
# 且未配置DISABLE_BOT_COMMAND禁用交互,
|
||||
# 且未配置自定义TG_API_HOST,因为配置了该变量,说明该容器环境可能并能科学的连到telegram服务器
|
||||
if [[ -n "$run_cmd" && -n "$TG_BOT_TOKEN" && -n "$TG_USER_ID" && -z "$DISABLE_BOT_COMMAND" && -z "$TG_API_HOST" ]]; then
|
||||
ENABLE_BOT_COMMAND=True
|
||||
else
|
||||
ENABLE_BOT_COMMAND=False
|
||||
fi
|
||||
|
||||
echo "------------------------------------------------执行定时任务任务shell脚本------------------------------------------------"
|
||||
#测试
|
||||
# sh /jd_docker/docker/default_task.sh "$ENABLE_BOT_COMMAND" "$run_cmd"
|
||||
#合并
|
||||
sh /scripts/docker/default_task.sh "$ENABLE_BOT_COMMAND" "$run_cmd"
|
||||
echo "--------------------------------------------------默认定时任务执行完成---------------------------------------------------"
|
||||
|
||||
if [ -n "$run_cmd" ]; then
|
||||
# 增加一层jd_bot指令已经正确安装成功校验
|
||||
# 以上条件都满足后会启动jd_bot交互,否还是按照以前的模式启动,最大程度避免现有用户改动调整
|
||||
if [[ "$ENABLE_BOT_COMMAND" == "True" && -f /usr/bin/jd_bot ]]; then
|
||||
echo "启动crontab定时任务主进程..."
|
||||
crond
|
||||
echo "启动telegram bot指令交主进程..."
|
||||
jd_bot
|
||||
else
|
||||
echo "启动crontab定时任务主进程..."
|
||||
crond -f
|
||||
fi
|
||||
|
||||
else
|
||||
echo "默认定时任务执行结束。"
|
||||
fi
|
||||
62
INS/JD/lxk0301/docker/example/custom-append.yml
Normal file
@ -0,0 +1,62 @@
|
||||
jd_scripts:
|
||||
image: lxk0301/jd_scripts
|
||||
# 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过0.2(单核的20%)
|
||||
# 经过实际测试,建议不低于200M
|
||||
# deploy:
|
||||
# resources:
|
||||
# limits:
|
||||
# cpus: '0.2'
|
||||
# memory: 200M
|
||||
container_name: jd_scripts
|
||||
restart: always
|
||||
volumes:
|
||||
- ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
|
||||
- ./logs:/scripts/logs
|
||||
tty: true
|
||||
# 因为更换仓库地址可能git pull的dns解析不到,可以在配置追加hosts
|
||||
extra_hosts:
|
||||
- "gitee.com:180.97.125.228"
|
||||
- "github.com:13.229.188.59"
|
||||
- "raw.githubusercontent.com:151.101.228.133"
|
||||
environment:
|
||||
#脚本更新仓库地址,配置了会切换到对应的地址
|
||||
- REPO_URL=git@gitee.com:lxk0301/jd_scripts.git
|
||||
# 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是示例,根据自己的需求增加删除
|
||||
#jd cookies
|
||||
# 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX;
|
||||
# 例(多账号): JD_COOKIE=pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;
|
||||
- JD_COOKIE=
|
||||
#微信server酱通知
|
||||
- PUSH_KEY=
|
||||
#Bark App通知
|
||||
- BARK_PUSH=
|
||||
#telegram机器人通知
|
||||
- TG_BOT_TOKEN=
|
||||
- TG_USER_ID=
|
||||
#钉钉机器人通知
|
||||
- DD_BOT_TOKEN=
|
||||
- DD_BOT_SECRET=
|
||||
#企业微信机器人通知
|
||||
- QYWX_KEY=
|
||||
#京东种豆得豆
|
||||
- PLANT_BEAN_SHARECODES=
|
||||
#京东农场
|
||||
# 例: FRUITSHARECODES=京东农场的互助码
|
||||
- FRUITSHARECODES=
|
||||
#京东萌宠
|
||||
# 例: PETSHARECODES=东东萌宠的互助码
|
||||
- PETSHARECODES=
|
||||
# 宠汪汪的喂食数量
|
||||
- JOY_FEED_COUNT=
|
||||
#东东超市
|
||||
# - SUPERMARKET_SHARECODES=
|
||||
#兑换多少数量的京豆(20,或者1000京豆,或者其他奖品的文字)
|
||||
# 例: MARKET_COIN_TO_BEANS=1000
|
||||
- MARKET_COIN_TO_BEANS=
|
||||
#如果设置了 RANDOM_DELAY_MAX ,则会启用随机延迟功能,延迟随机 0 到 RANDOM_DELAY_MAX-1 秒。如果不设置此项,则不使用延迟。
|
||||
#并不是所有的脚本都会被启用延迟,因为有一些脚本需要整点触发。延迟的目的有两个,1是降低抢占cpu资源几率,2是降低检查风险(主要是1)
|
||||
#填写数字,单位为秒,比如写为 RANDOM_DELAY_MAX=30 就是随机产生0到29之间的一个秒数,执行延迟的意思。
|
||||
- RANDOM_DELAY_MAX=120
|
||||
#使用自定义定任务追加默认任务之后,上面volumes挂载之后这里配置对应的文件名
|
||||
- CUSTOM_LIST_FILE=my_crontab_list.sh
|
||||
|
||||
62
INS/JD/lxk0301/docker/example/custom-overwrite.yml
Normal file
@ -0,0 +1,62 @@
|
||||
jd_scripts:
|
||||
image: lxk0301/jd_scripts
|
||||
# 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过0.2(单核的20%)
|
||||
# 经过实际测试,建议不低于200M
|
||||
# deploy:
|
||||
# resources:
|
||||
# limits:
|
||||
# cpus: '0.2'
|
||||
# memory: 200M
|
||||
container_name: jd_scripts
|
||||
restart: always
|
||||
volumes:
|
||||
- ./my_crontab_list.sh:/scripts/docker/my_crontab_list.sh
|
||||
- ./logs:/scripts/logs
|
||||
tty: true
|
||||
# 因为更换仓库地址可能git pull的dns解析不到,可以在配置追加hosts
|
||||
extra_hosts:
|
||||
- "gitee.com:180.97.125.228"
|
||||
- "github.com:13.229.188.59"
|
||||
- "raw.githubusercontent.com:151.101.228.133"
|
||||
environment:
|
||||
#脚本更新仓库地址,配置了会切换到对应的地址
|
||||
- REPO_URL=git@gitee.com:lxk0301/jd_scripts.git
|
||||
# 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是示例,根据自己的需求增加删除
|
||||
#jd cookies
|
||||
# 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX;
|
||||
#例(多账号): JD_COOKIE=pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;
|
||||
- JD_COOKIE=
|
||||
#微信server酱通知
|
||||
- PUSH_KEY=
|
||||
#Bark App通知
|
||||
- BARK_PUSH=
|
||||
#telegram机器人通知
|
||||
- TG_BOT_TOKEN=
|
||||
- TG_USER_ID=
|
||||
#钉钉机器人通知
|
||||
- DD_BOT_TOKEN=
|
||||
- DD_BOT_SECRET=
|
||||
#企业微信机器人通知
|
||||
- QYWX_KEY=
|
||||
#京东种豆得豆
|
||||
- PLANT_BEAN_SHARECODES=
|
||||
#京东农场
|
||||
# 例: FRUITSHARECODES=京东农场的互助码
|
||||
- FRUITSHARECODES=
|
||||
#京东萌宠
|
||||
# 例: PETSHARECODES=东东萌宠的互助码
|
||||
- PETSHARECODES=
|
||||
# 宠汪汪的喂食数量
|
||||
- JOY_FEED_COUNT=
|
||||
#东东超市
|
||||
# - SUPERMARKET_SHARECODES=
|
||||
#兑换多少数量的京豆(20,或者1000京豆,或者其他奖品的文字)
|
||||
# 例: MARKET_COIN_TO_BEANS=1000
|
||||
- MARKET_COIN_TO_BEANS=
|
||||
#如果设置了 RANDOM_DELAY_MAX ,则会启用随机延迟功能,延迟随机 0 到 RANDOM_DELAY_MAX-1 秒。如果不设置此项,则不使用延迟。
|
||||
#并不是所有的脚本都会被启用延迟,因为有一些脚本需要整点触发。延迟的目的有两个,1是降低抢占cpu资源几率,2是降低检查风险(主要是1)
|
||||
#填写数字,单位为秒,比如写为 RANDOM_DELAY_MAX=30 就是随机产生0到29之间的一个秒数,执行延迟的意思。
|
||||
- RANDOM_DELAY_MAX=120
|
||||
#使用自定义定任务覆盖默认任务,上面volumes挂载之后这里配置对应的文件名,和自定义文件使用方式为overwrite
|
||||
- CUSTOM_LIST_FILE=my_crontab_list.sh
|
||||
- CUSTOM_LIST_MERGE_TYPE=overwrite
|
||||
59
INS/JD/lxk0301/docker/example/default.yml
Normal file
@ -0,0 +1,59 @@
|
||||
jd_scripts:
|
||||
image: lxk0301/jd_scripts
|
||||
# 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过0.2(单核的20%)
|
||||
# 经过实际测试,建议不低于200M
|
||||
# deploy:
|
||||
# resources:
|
||||
# limits:
|
||||
# cpus: '0.2'
|
||||
# memory: 200M
|
||||
container_name: jd_scripts
|
||||
restart: always
|
||||
volumes:
|
||||
- ./logs:/scripts/logs
|
||||
tty: true
|
||||
# 因为更换仓库地址可能git pull的dns解析不到,可以在配置追加hosts
|
||||
extra_hosts:
|
||||
- "gitee.com:180.97.125.228"
|
||||
- "github.com:13.229.188.59"
|
||||
- "raw.githubusercontent.com:151.101.228.133"
|
||||
environment:
|
||||
#脚本更新仓库地址,配置了会切换到对应的地址
|
||||
- REPO_URL=git@gitee.com:lxk0301/jd_scripts.git
|
||||
# 注意环境变量填写值的时候一律不需要引号(""或者'')下面这些只是示例,根据自己的需求增加删除
|
||||
#jd cookies
|
||||
# 例: JD_COOKIE=pt_key=XXX;pt_pin=XXX;
|
||||
# 例(多账号): JD_COOKIE=pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;
|
||||
- JD_COOKIE=
|
||||
#微信server酱通知
|
||||
- PUSH_KEY=
|
||||
#Bark App通知
|
||||
- BARK_PUSH=
|
||||
#telegram机器人通知
|
||||
- TG_BOT_TOKEN=
|
||||
- TG_USER_ID=
|
||||
#钉钉机器人通知
|
||||
- DD_BOT_TOKEN=
|
||||
- DD_BOT_SECRET=
|
||||
#企业微信机器人通知
|
||||
- QYWX_KEY=
|
||||
#京东种豆得豆
|
||||
- PLANT_BEAN_SHARECODES=
|
||||
#京东农场
|
||||
# 例: FRUITSHARECODES=京东农场的互助码
|
||||
- FRUITSHARECODES=
|
||||
#京东萌宠
|
||||
# 例: PETSHARECODES=东东萌宠的互助码
|
||||
- PETSHARECODES=
|
||||
# 宠汪汪的喂食数量
|
||||
- JOY_FEED_COUNT=
|
||||
#东东超市
|
||||
# - SUPERMARKET_SHARECODES=
|
||||
#兑换多少数量的京豆(20,或者1000京豆,或者其他奖品的文字)
|
||||
# 例: MARKET_COIN_TO_BEANS=1000
|
||||
- MARKET_COIN_TO_BEANS=
|
||||
|
||||
#如果设置了 RANDOM_DELAY_MAX ,则会启用随机延迟功能,延迟随机 0 到 RANDOM_DELAY_MAX-1 秒。如果不设置此项,则不使用延迟。
|
||||
#并不是所有的脚本都会被启用延迟,因为有一些脚本需要整点触发。延迟的目的有两个,1是降低抢占cpu资源几率,2是降低检查风险(主要是1)
|
||||
#填写数字,单位为秒,比如写为 RANDOM_DELAY_MAX=30 就是随机产生0到29之间的一个秒数,执行延迟的意思。
|
||||
- RANDOM_DELAY_MAX=120
|
||||
83
INS/JD/lxk0301/docker/example/docker多账户使用独立容器使用说明.md
Normal file
@ -0,0 +1,83 @@
|
||||
### 使用此方式,请先理解学会使用[docker办法一](https://github.com/LXK9301/jd_scripts/tree/master/docker#%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95jd_scripts%E7%94%A8%E4%BA%8E%E5%AD%98%E6%94%BE%E5%A4%87%E4%BB%BD%E9%85%8D%E7%BD%AE%E7%AD%89%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E9%87%8D%E8%A3%85%E7%9A%84%E6%97%B6%E5%80%99%E5%8F%AA%E9%9C%80%E8%A6%81%E5%A4%87%E4%BB%BD%E6%95%B4%E4%B8%AAjd_scripts%E7%9B%AE%E5%BD%95%E5%8D%B3%E5%8F%AF)的使用方式
|
||||
> 发现有人好像希望不同账户任务并发执行,不想一个账户执行完了才能再执行另一个,这里写一个`docker办法一`的基础上实现方式,其实就是不同账户创建不同的容器,他们互不干扰单独定时执行自己的任务。
|
||||
配置使用起来还是比较简单的,具体往下看
|
||||
### 文件夹目录参考
|
||||

|
||||
### 具体使用说明直接在图片标注了,文件参考[图片下方](https://github.com/LXK9301/jd_scripts/new/master/docker#docker-composeyml%E6%96%87%E4%BB%B6%E5%8F%82%E8%80%83),配置完成后的[执行命令]()
|
||||

|
||||
#### `docker-compose.yml`文件参考
|
||||
```yaml
|
||||
version: "3"
|
||||
services:
|
||||
jd_scripts1: #默认
|
||||
image: lxk0301/jd_scripts
|
||||
# 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过 0.2(单核的20%)
|
||||
# 经过实际测试,建议不低于200M
|
||||
# deploy:
|
||||
# resources:
|
||||
# limits:
|
||||
# cpus: '0.2'
|
||||
# memory: 200M
|
||||
restart: always
|
||||
container_name: jd_scripts1
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs1:/scripts/logs
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
# 互助助码等参数可自行增加,如下。
|
||||
# 京东种豆得豆
|
||||
# - PLANT_BEAN_SHARECODES=
|
||||
|
||||
jd_scripts2: #默认
|
||||
image: lxk0301/jd_scripts
|
||||
restart: always
|
||||
container_name: jd_scripts2
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs2:/scripts/logs
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
jd_scripts4: #自定义追加默认之后
|
||||
image: lxk0301/jd_scripts
|
||||
restart: always
|
||||
container_name: jd_scripts4
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs4:/scripts/logs
|
||||
- ./my_crontab_list4.sh:/scripts/docker/my_crontab_list.sh
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
- CUSTOM_LIST_FILE=my_crontab_list.sh
|
||||
jd_scripts5: #自定义覆盖默认
|
||||
image: lxk0301/jd_scripts
|
||||
restart: always
|
||||
container_name: jd_scripts5
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs5:/scripts/logs
|
||||
- ./my_crontab_list5.sh:/scripts/docker/my_crontab_list.sh
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
- CUSTOM_LIST_FILE=my_crontab_list.sh
|
||||
- CUSTOM_LIST_MERGE_TYPE=overwrite
|
||||
|
||||
```
|
||||
#### 目录文件配置好之后在 `jd_scripts_multi`目录执行
|
||||
`docker-compose up -d` 启动;
|
||||
`docker-compose logs` 打印日志;
|
||||
`docker-compose pull` 更新镜像;
|
||||
`docker-compose stop` 停止容器;
|
||||
`docker-compose restart` 重启容器;
|
||||
`docker-compose down` 停止并删除容器;
|
||||

|
||||
|
||||
|
||||
@ -0,0 +1,65 @@
|
||||
{
|
||||
"cap_add" : [],
|
||||
"cap_drop" : [],
|
||||
"cmd" : "",
|
||||
"cpu_priority" : 50,
|
||||
"devices" : null,
|
||||
"enable_publish_all_ports" : false,
|
||||
"enable_restart_policy" : true,
|
||||
"enabled" : true,
|
||||
"env_variables" : [
|
||||
{
|
||||
"key" : "PATH",
|
||||
"value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
},
|
||||
{
|
||||
"key" : "CDN_JD_DAILYBONUS",
|
||||
"value" : "true"
|
||||
},
|
||||
{
|
||||
"key" : "JD_COOKIE",
|
||||
"value" : "pt_key=xxx;pt_pin=xxx;"
|
||||
},
|
||||
{
|
||||
"key" : "PUSH_KEY",
|
||||
"value" : ""
|
||||
},
|
||||
{
|
||||
"key" : "CUSTOM_LIST_FILE",
|
||||
"value" : "my_crontab_list.sh"
|
||||
}
|
||||
],
|
||||
"exporting" : false,
|
||||
"id" : "3a2f6f27c23f93bc104585c22569c760cc9ce82df09cdb41d53b491fe1d0341c",
|
||||
"image" : "lxk0301/jd_scripts",
|
||||
"is_ddsm" : false,
|
||||
"is_package" : false,
|
||||
"links" : [],
|
||||
"memory_limit" : 0,
|
||||
"name" : "jd_scripts",
|
||||
"network" : [
|
||||
{
|
||||
"driver" : "bridge",
|
||||
"name" : "bridge"
|
||||
}
|
||||
],
|
||||
"network_mode" : "default",
|
||||
"port_bindings" : [],
|
||||
"privileged" : false,
|
||||
"shortcut" : {
|
||||
"enable_shortcut" : false
|
||||
},
|
||||
"use_host_network" : false,
|
||||
"volume_bindings" : [
|
||||
{
|
||||
"host_volume_file" : "/docker/jd_scripts/my_crontab_list.sh",
|
||||
"mount_point" : "/scripts/docker/my_crontab_list.sh",
|
||||
"type" : "rw"
|
||||
},
|
||||
{
|
||||
"host_volume_file" : "/docker/jd_scripts/logs",
|
||||
"mount_point" : "/scripts/logs",
|
||||
"type" : "rw"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,69 @@
|
||||
{
|
||||
"cap_add" : [],
|
||||
"cap_drop" : [],
|
||||
"cmd" : "",
|
||||
"cpu_priority" : 50,
|
||||
"devices" : null,
|
||||
"enable_publish_all_ports" : false,
|
||||
"enable_restart_policy" : true,
|
||||
"enabled" : true,
|
||||
"env_variables" : [
|
||||
{
|
||||
"key" : "PATH",
|
||||
"value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
},
|
||||
{
|
||||
"key" : "CDN_JD_DAILYBONUS",
|
||||
"value" : "true"
|
||||
},
|
||||
{
|
||||
"key" : "JD_COOKIE",
|
||||
"value" : "pt_key=xxx;pt_pin=xxx;"
|
||||
},
|
||||
{
|
||||
"key" : "PUSH_KEY",
|
||||
"value" : ""
|
||||
},
|
||||
{
|
||||
"key" : "CUSTOM_LIST_FILE",
|
||||
"value" : "my_crontab_list.sh"
|
||||
},
|
||||
{
|
||||
"key" : "CUSTOM_LIST_MERGE_TYPE",
|
||||
"value" : "overwrite"
|
||||
}
|
||||
],
|
||||
"exporting" : false,
|
||||
"id" : "3a2f6f27c23f93bc104585c22569c760cc9ce82df09cdb41d53b491fe1d0341c",
|
||||
"image" : "lxk0301/jd_scripts",
|
||||
"is_ddsm" : false,
|
||||
"is_package" : false,
|
||||
"links" : [],
|
||||
"memory_limit" : 0,
|
||||
"name" : "jd_scripts",
|
||||
"network" : [
|
||||
{
|
||||
"driver" : "bridge",
|
||||
"name" : "bridge"
|
||||
}
|
||||
],
|
||||
"network_mode" : "default",
|
||||
"port_bindings" : [],
|
||||
"privileged" : false,
|
||||
"shortcut" : {
|
||||
"enable_shortcut" : false
|
||||
},
|
||||
"use_host_network" : false,
|
||||
"volume_bindings" : [
|
||||
{
|
||||
"host_volume_file" : "/docker/jd_scripts/my_crontab_list.sh",
|
||||
"mount_point" : "/scripts/docker/my_crontab_list.sh",
|
||||
"type" : "rw"
|
||||
},
|
||||
{
|
||||
"host_volume_file" : "/docker/jd_scripts/logs",
|
||||
"mount_point" : "/scripts/logs",
|
||||
"type" : "rw"
|
||||
}
|
||||
]
|
||||
}
|
||||
83
INS/JD/lxk0301/docker/example/jd_scripts.syno.json
Normal file
@ -0,0 +1,83 @@
|
||||
{
|
||||
"cap_add" : null,
|
||||
"cap_drop" : null,
|
||||
"cmd" : "",
|
||||
"cpu_priority" : 0,
|
||||
"devices" : null,
|
||||
"enable_publish_all_ports" : false,
|
||||
"enable_restart_policy" : true,
|
||||
"enabled" : false,
|
||||
"env_variables" : [
|
||||
{
|
||||
"key" : "PATH",
|
||||
"value" : "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
},
|
||||
{
|
||||
"key" : "CDN_JD_DAILYBONUS",
|
||||
"value" : "true"
|
||||
},
|
||||
{
|
||||
"key" : "JD_COOKIE",
|
||||
"value" : "pt_key=AAJfjaNrADASxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxx5;"
|
||||
},
|
||||
{
|
||||
"key" : "TG_BOT_TOKEN",
|
||||
"value" : "13xxxxxx80:AAEkNxxxxxxzNf91WQ"
|
||||
},
|
||||
{
|
||||
"key" : "TG_USER_ID",
|
||||
"value" : "12xxxx206"
|
||||
},
|
||||
{
|
||||
"key" : "PLANT_BEAN_SHARECODES",
|
||||
"value" : ""
|
||||
},
|
||||
{
|
||||
"key" : "FRUITSHARECODES",
|
||||
"value" : ""
|
||||
},
|
||||
{
|
||||
"key" : "PETSHARECODES",
|
||||
"value" : ""
|
||||
},
|
||||
{
|
||||
"key" : "SUPERMARKET_SHARECODES",
|
||||
"value" : ""
|
||||
},
|
||||
{
|
||||
"key" : "CRONTAB_LIST_FILE",
|
||||
"value" : "crontab_list.sh"
|
||||
}
|
||||
],
|
||||
"exporting" : false,
|
||||
"id" : "18af38bc0ac37a40e4b9608a86fef56c464577cc160bbdddec90155284fcf4e5",
|
||||
"image" : "lxk0301/jd_scripts",
|
||||
"is_ddsm" : false,
|
||||
"is_package" : false,
|
||||
"links" : [],
|
||||
"memory_limit" : 0,
|
||||
"name" : "jd_scripts",
|
||||
"network" : [
|
||||
{
|
||||
"driver" : "bridge",
|
||||
"name" : "bridge"
|
||||
}
|
||||
],
|
||||
"network_mode" : "default",
|
||||
"port_bindings" : [],
|
||||
"privileged" : false,
|
||||
"shortcut" : {
|
||||
"enable_shortcut" : false,
|
||||
"enable_status_page" : false,
|
||||
"enable_web_page" : false,
|
||||
"web_page_url" : ""
|
||||
},
|
||||
"use_host_network" : false,
|
||||
"volume_bindings" : [
|
||||
{
|
||||
"host_volume_file" : "/docker/jd_scripts/logs",
|
||||
"mount_point" : "/scripts/logs",
|
||||
"type" : "rw"
|
||||
}
|
||||
]
|
||||
}
|
||||
62
INS/JD/lxk0301/docker/example/multi.yml
Normal file
@ -0,0 +1,62 @@
|
||||
version: "3"
|
||||
services:
|
||||
jd_scripts1: #默认
|
||||
image: lxk0301/jd_scripts
|
||||
# 配置服务器资源约束。此例子中服务被限制为使用内存不超过200M以及cpu不超过 0.2(单核的20%)
|
||||
# 经过实际测试,建议不低于200M
|
||||
# deploy:
|
||||
# resources:
|
||||
# limits:
|
||||
# cpus: '0.2'
|
||||
# memory: 200M
|
||||
restart: always
|
||||
container_name: jd_scripts1
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs1:/scripts/logs
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
# 互助助码等参数可自行增加,如下。
|
||||
# 京东种豆得豆
|
||||
# - PLANT_BEAN_SHARECODES=
|
||||
|
||||
jd_scripts2: #默认
|
||||
image: lxk0301/jd_scripts
|
||||
restart: always
|
||||
container_name: jd_scripts2
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs2:/scripts/logs
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
jd_scripts4: #自定义追加默认之后
|
||||
image: lxk0301/jd_scripts
|
||||
restart: always
|
||||
container_name: jd_scripts4
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs4:/scripts/logs
|
||||
- ./my_crontab_list4.sh:/scripts/docker/my_crontab_list.sh
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
- CUSTOM_LIST_FILE=my_crontab_list.sh
|
||||
jd_scripts5: #自定义覆盖默认
|
||||
image: lxk0301/jd_scripts
|
||||
restart: always
|
||||
container_name: jd_scripts5
|
||||
tty: true
|
||||
volumes:
|
||||
- ./logs5:/scripts/logs
|
||||
- ./my_crontab_list5.sh:/scripts/docker/my_crontab_list.sh
|
||||
environment:
|
||||
- JD_COOKIE=pt_key=AAJfjaNrADAS8ygfgIsOxxxxxxxKpfDaZ2pSBOYTxtPqLK8U1Q;pt_pin=lxxxxxx5;
|
||||
- TG_BOT_TOKEN=130xxxx280:AAExxxxxxWP10zNf91WQ
|
||||
- TG_USER_ID=12xxxx206
|
||||
- CUSTOM_LIST_FILE=my_crontab_list.sh
|
||||
- CUSTOM_LIST_MERGE_TYPE=overwrite
|
||||
20
INS/JD/lxk0301/docker/notify_docker_user.js
Normal file
@ -0,0 +1,20 @@
|
||||
const notify = require('../sendNotify');
|
||||
const fs = require('fs');
|
||||
const notifyPath = '/scripts/logs/notify.txt';
|
||||
async function image_update_notify() {
|
||||
if (fs.existsSync(notifyPath)) {
|
||||
const content = await fs.readFileSync(`${notifyPath}`, 'utf8');//读取notify.txt内容
|
||||
if (process.env.NOTIFY_CONTENT && !content.includes(process.env.NOTIFY_CONTENT)) {
|
||||
await notify.sendNotify("⚠️Docker镜像版本更新通知⚠️", process.env.NOTIFY_CONTENT);
|
||||
await fs.writeFileSync(`${notifyPath}`, process.env.NOTIFY_CONTENT);
|
||||
}
|
||||
} else {
|
||||
if (process.env.NOTIFY_CONTENT) {
|
||||
notify.sendNotify("⚠️Docker镜像版本更新通知⚠️", process.env.NOTIFY_CONTENT)
|
||||
await fs.writeFileSync(`${notifyPath}`, process.env.NOTIFY_CONTENT);
|
||||
}
|
||||
}
|
||||
}
|
||||
!(async() => {
|
||||
await image_update_notify();
|
||||
})().catch((e) => console.log(e))
|
||||
27
INS/JD/lxk0301/docker/proc_file.sh
Normal file
@ -0,0 +1,27 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [[ -f /usr/bin/jd_bot && -z "$DISABLE_SPNODE" ]]; then
|
||||
CMD="spnode"
|
||||
else
|
||||
CMD="node"
|
||||
fi
|
||||
|
||||
echo "处理jd_crazy_joy_coin任务。。。"
|
||||
if [ ! $CRZAY_JOY_COIN_ENABLE ]; then
|
||||
echo "默认启用jd_crazy_joy_coin杀掉jd_crazy_joy_coin任务,并重启"
|
||||
eval $(ps -ef | grep "jd_crazy_joy_coin" | grep -v "grep" | awk '{print "kill "$1}')
|
||||
echo '' >/scripts/logs/jd_crazy_joy_coin.log
|
||||
$CMD /scripts/jd_crazy_joy_coin.js | ts >>/scripts/logs/jd_crazy_joy_coin.log 2>&1 &
|
||||
echo "默认jd_crazy_joy_coin重启完成"
|
||||
else
|
||||
if [ $CRZAY_JOY_COIN_ENABLE = "Y" ]; then
|
||||
echo "配置启用jd_crazy_joy_coin,杀掉jd_crazy_joy_coin任务,并重启"
|
||||
eval $(ps -ef | grep "jd_crazy_joy_coin" | grep -v "grep" | awk '{print "kill "$1}')
|
||||
echo '' >/scripts/logs/jd_crazy_joy_coin.log
|
||||
$CMD /scripts/jd_crazy_joy_coin.js | ts >>/scripts/logs/jd_crazy_joy_coin.log 2>&1 &
|
||||
echo "配置jd_crazy_joy_coin重启完成"
|
||||
else
|
||||
eval $(ps -ef | grep "jd_crazy_joy_coin" | grep -v "grep" | awk '{print "kill "$1}')
|
||||
echo "已配置不启用jd_crazy_joy_coin任务,仅杀掉"
|
||||
fi
|
||||
fi
|
||||
134
INS/JD/lxk0301/githubAction.md
Normal file
@ -0,0 +1,134 @@
|
||||
## 环境变量说明
|
||||
|
||||
##### 京东(必须)
|
||||
|
||||
| Name | 归属 | 属性 | 说明 |
|
||||
| :---------: | :--: | ---- | ------------------------------------------------------------ |
|
||||
| `JD_COOKIE` | 京东 | 必须 | 京东cookie,多个账号的cookie使用`&`隔开,例:`pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;&pt_key=XXX;pt_pin=XXX;`。具体获取参考[浏览器获取京东cookie教程](./backUp/GetJdCookie.md) 或者 [插件获取京东cookie教程](./backUp/GetJdCookie2.md) |
|
||||
|
||||
##### 京东隐私安全 环境变量
|
||||
|
||||
| Name | 归属 | 属性 | 默认值 | 说明 |
|
||||
| :-------------: | :---------: | :----: | :----: | ------------------------------------------------------------ |
|
||||
| `JD_DEBUG` | 脚本打印log | 非必须 | true | 运行脚本时,是否显示log,默认显示。改成false表示不显示,注重隐私的人可以设置 JD_DEBUG 为false |
|
||||
| `JD_USER_AGENT` | 京东 | 非必须 | | 自定义此库里京东系列脚本的UserAgent,不懂不知不会UserAgent的请不要随意填写内容。如需使用此功能建议填写京东APP的UA |
|
||||
|
||||
##### 推送通知环境变量(目前提供`微信server酱`、`pushplus(推送加)`、`iOS Bark APP`、`telegram机器人`、`钉钉机器人`、`企业微信机器人`、`iGot`、`企业微信应用消息`等通知方式)
|
||||
|
||||
| Name | 归属 | 属性 | 说明 |
|
||||
| :---------------: | :----------------------------------------------------------: | :----: | ------------------------------------------------------------ |
|
||||
| `PUSH_KEY` | 微信server酱推送 | 非必须 | server酱的微信通知[官方文档](http://sc.ftqq.com/3.version),已兼容 [Server酱·Turbo版](https://sct.ftqq.com/) |
|
||||
| `BARK_PUSH` | [BARK推送](https://apps.apple.com/us/app/bark-customed-notifications/id1403753865) | 非必须 | IOS用户下载BARK这个APP,填写内容是app提供的`设备码`,例如:https://api.day.app/123 ,那么此处的设备码就是`123`,再不懂看 [这个图](icon/bark.jpg)(注:支持自建填完整链接即可) |
|
||||
| `BARK_SOUND` | [BARK推送](https://apps.apple.com/us/app/bark-customed-notifications/id1403753865) | 非必须 | bark推送声音设置,例如`choo`,具体值请在`bark`-`推送铃声`-`查看所有铃声` |
|
||||
| `TG_BOT_TOKEN` | telegram推送 | 非必须 | tg推送(需设备可连接外网),`TG_BOT_TOKEN`和`TG_USER_ID`两者必需,填写自己申请[@BotFather](https://t.me/BotFather)的Token,如`10xxx4:AAFcqxxxxgER5uw` , [具体教程](./backUp/TG_PUSH.md) |
|
||||
| `TG_USER_ID` | telegram推送 | 非必须 | tg推送(需设备可连接外网),`TG_BOT_TOKEN`和`TG_USER_ID`两者必需,填写[@getuseridbot](https://t.me/getuseridbot)中获取到的纯数字ID, [具体教程](./backUp/TG_PUSH.md) |
|
||||
| `DD_BOT_TOKEN` | 钉钉推送 | 非必须 | 钉钉推送(`DD_BOT_TOKEN`和`DD_BOT_SECRET`两者必需)[官方文档](https://developers.dingtalk.com/document/app/custom-robot-access) ,只需`https://oapi.dingtalk.com/robot/send?access_token=XXX` 等于`=`符号后面的XXX即可 |
|
||||
| `DD_BOT_SECRET` | 钉钉推送 | 非必须 | (`DD_BOT_TOKEN`和`DD_BOT_SECRET`两者必需) ,密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的`SECXXXXXXXXXX`等字符 , 注:钉钉机器人安全设置只需勾选`加签`即可,其他选项不要勾选,再不懂看 [这个图](icon/DD_bot.png) |
|
||||
| `QYWX_KEY` | 企业微信机器人推送 | 非必须 | 密钥,企业微信推送 webhook 后面的 key [详见官方说明文档](https://work.weixin.qq.com/api/doc/90000/90136/91770) |
|
||||
| `QYWX_AM` | 企业微信应用消息推送 | 非必须 | corpid,corpsecret,touser,agentid,素材库图片id [参考文档1](http://note.youdao.com/s/HMiudGkb) [参考文档2](http://note.youdao.com/noteshare?id=1a0c8aff284ad28cbd011b29b3ad0191)<br>素材库图片填0为图文消息, 填1为纯文本消息 |
|
||||
| `IGOT_PUSH_KEY` | iGot推送 | 非必须 | iGot聚合推送,支持多方式推送,确保消息可达。 [参考文档](https://wahao.github.io/Bark-MP-helper ) |
|
||||
| `PUSH_PLUS_TOKEN` | pushplus推送 | 非必须 | 微信扫码登录后一对一推送或一对多推送下面的token(您的Token) [官方网站](http://www.pushplus.plus/) |
|
||||
| `PUSH_PLUS_USER` | pushplus推送 | 非必须 | 一对多推送的“群组编码”(一对多推送下面->您的群组(如无则新建)->群组编码)注:(1、需订阅者扫描二维码 2、如果您是创建群组所属人,也需点击“查看二维码”扫描绑定,否则不能接受群组消息推送),只填`PUSH_PLUS_TOKEN`默认为一对一推送 |
|
||||
| `TG_PROXY_HOST` | Telegram 代理的 IP | 非必须 | 代理类型为 http。例子:http代理 http://127.0.0.1:1080 则填写 127.0.0.1 |
|
||||
| `TG_PROXY_PORT` | Telegram 代理的端口 | 非必须 | 例子:http代理 http://127.0.0.1:1080 则填写 1080 |
|
||||
| `TG_PROXY_AUTH` | Telegram 代理的认证参数 | 非必须 | 代理的认证参数 |
|
||||
| `TG_API_HOST` | Telegram api自建的反向代理地址 | 非必须 | 例子:反向代理地址 http://aaa.bbb.ccc 则填写 aaa.bbb.ccc [简略搭建教程](https://shimo.im/docs/JD38CJDQtYy3yTd8/read) |
|
||||
|
||||
|
||||
##### 互助码类环境变量
|
||||
|
||||
| Name | 归属 | 属性 | 需要助力次数/可提供助力次数 | 说明 |
|
||||
| :-------------------------: | :----------------: | :----: | :-----------------------: | ------------------------------------------------------------ |
|
||||
| `FRUITSHARECODES` | 东东农场<br>互助码 | 非必须 | 5/3 | 填写规则请看[jdFruitShareCodes.js](./jdFruitShareCodes.js)或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `PETSHARECODES` | 东东萌宠<br>互助码 | 非必须 | 5/5 | 填写规则和上面类似或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `PLANT_BEAN_SHARECODES` | 种豆得豆<br>互助码 | 非必须 | 9/3 | 填写规则和上面类似或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `DDFACTORY_SHARECODES` | 东东工厂<br>互助码 | 非必须 | 5/3 | 填写规则和上面类似或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `DREAM_FACTORY_SHARE_CODES` | 京喜工厂<br>互助码 | 非必须 | 不固定/3 | 填写规则和上面类似或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `JDZZ_SHARECODES` | 京东赚赚<br>互助码 | 非必须 | 5/2 | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `JDJOY_SHARECODES` | 疯狂的JOY<br>互助码 | 非必须 | 6/ | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `BOOKSHOP_SHARECODES` | 京东书店<br>互助码 | 非必须 | 10/ | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `JD_CASH_SHARECODES` | 签到领现金<br>互助码 | 非必须 | 10/ | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `JDSGMH_SHARECODES` | 闪购盲盒<br>互助码 | 非必须 | 10/ | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `JDCFD_SHARECODES` | 京喜财富岛<br>互助码 | 非必须 | 未知/未知 | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `JDHEALTH_SHARECODES` | 东东健康社区<br>互助码 | 非必须 | 未知/未知 | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
| `CITY_SHARECODES` | 城城领现金<br>互助码 | 非必须 | 未知/未知 | 填写规则和上面类似,或见下方[互助码的填写规则](#互助码的填写规则) |
|
||||
|
||||
##### 控制脚本功能环境变量
|
||||
|
||||
|
||||
| Name | 归属 | 属性 | 说明 |
|
||||
| :--------------------------: | :--------------------------: | :----: | ------------------------------------------------------------ |
|
||||
| `JD_BEAN_STOP` | 京东多合一签到 | 非必须 | `jd_bean_sign.js`自定义延迟签到,单位毫秒.默认分批并发无延迟,<br>延迟作用于每个签到接口,如填入延迟则切换顺序签到(耗时较长),<br>如需填写建议输入数字`1`,详见[此处说明](https://github.com/NobyDa/Script/blob/master/JD-DailyBonus/JD_DailyBonus.js#L93) |
|
||||
| `JD_BEAN_SIGN_STOP_NOTIFY` | 京东多合一签到 | 非必须 | `jd_bean_sign.js`脚本运行后不推送签到结果通知,默认推送,填`true`表示不发送通知 |
|
||||
| `JD_BEAN_SIGN_NOTIFY_SIMPLE` | 京东多合一签到 | 非必须 | `jd_bean_sign.js`脚本运行后推送签到结果简洁版通知,<br>默认推送签到简洁结果,填`true`表示推送简洁通知,[效果图](./icon/bean_sign_simple.jpg) |
|
||||
| `PET_NOTIFY_CONTROL` | 东东萌宠<br>推送开关 | 非必须 | 控制京东萌宠是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `FRUIT_NOTIFY_CONTROL` | 东东农场<br>推送开关 | 非必须 | 控制京东农场是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `CASH_NOTIFY_CONTROL` | 京东领现金<br>推送开关 | 非必须 | 控制京东领现金是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `CASH_EXCHANGE` | 京东领现金<br>红包兑换京豆开关 | 非必须 | 控制京东领现金是否把红包兑换成京豆,<br>`false`为否,`true`为是(即:花费2元红包兑换200京豆,一周可换四次),默认为`false` |
|
||||
| `DDQ_NOTIFY_CONTROL` | 点点券<br>推送开关 | 非必须 | 控制点点券是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `JDZZ_NOTIFY_CONTROL` | 京东赚赚小程序<br>推送开关 | 非必须 | 控制京东赚赚小程序是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `MONEYTREE_NOTIFY_CONTROL` | 京东摇钱树<br>推送开关 | 非必须 | 控制京东摇钱树兑换0.07金贴后是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `JD_JOY_REWARD_NOTIFY` | 宠汪汪<br>兑换京豆推送开关 | 非必须 | 控制`jd_joy_reward.js`脚本是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `JOY_FEED_COUNT` | 宠汪汪喂食数量 | 非必须 | 控制`jd_joy_feedPets.js`脚本喂食数量,可以填的数字0,10,20,40,80,其他数字不可. |
|
||||
| `JOY_HELP_FEED` | 宠汪汪帮好友喂食 | 非必须 | 控制`jd_joy_steal.js`脚本是否给好友喂食,`false`为否,`true`为是(给好友喂食) |
|
||||
| `JOY_RUN_FLAG` | 宠汪汪是否赛跑 | 非必须 | 控制`jd_joy.js`脚本是否参加赛跑(默认参加双人赛跑),<br>`false`为否,`true`为是,脚本默认是`true` |
|
||||
| `JOY_TEAM_LEVEL` | 宠汪汪<br>参加什么级别的赛跑 | 非必须 | 控制`jd_joy.js`脚本参加几人的赛跑,可选数字为`2`,`10`,`50`,<br>其中2代表参加双人PK赛,10代表参加10人突围赛,<br>50代表参加50人挑战赛(注:此项功能在`JOY_RUN_FLAG`为true的时候才生效),<br>如若想设置不同账号参加不同类别的比赛则用&区分即可(如下三个账号:`2&10&50`) |
|
||||
| `JOY_RUN_NOTIFY` | 宠汪汪<br>宠汪汪赛跑获胜后是否推送通知 | 非必须 | 控制`jd_joy.js`脚本宠汪汪赛跑获胜后是否推送通知,<br>`false`为否(不推送通知消息),`true`为是(即:发送推送通知消息)<br> |
|
||||
| `JOY_RUN_HELP_MYSELF` | 宠汪汪<br>赛跑自己账号内部互助 | 非必须 | 输入`true`为开启内部互助 |
|
||||
| `JD_JOY_REWARD_NAME` | 宠汪汪<br>积分兑换多少京豆 | 非必须 | 目前可填值为`20`或者`500`,脚本默认`0`,`0`表示不兑换京豆 |
|
||||
| `JOY_RUN_TOKEN` | 宠汪汪<br>赛跑token | 非必须 | 需自行抓包,宠汪汪小程序获取token,点击`发现`或`我的`,寻找`^https:\/\/draw\.jdfcloud\.com(\/mirror)?\/\/api\/user\/user\/detail\?openId=`获取token |
|
||||
| `MARKET_COIN_TO_BEANS` | 东东超市<br>兑换京豆数量 | 非必须 | 控制`jd_blueCoin.js`兑换京豆数量,<br>可输入值为`20`或者`1000`的数字或者其他商品的名称,例如`碧浪洗衣凝珠` |
|
||||
| `MARKET_REWARD_NOTIFY` | 东东超市<br>兑换奖品推送开关 | 非必须 | 控制`jd_blueCoin.js`兑换奖品成功后是否静默运行,<br>`false`为否(发送推送通知消息),`true`为是(即:不发送推送通知消息) |
|
||||
| `JOIN_PK_TEAM` | 东东超市<br>自动参加PK队伍 | 非必须 | 每次pk活动参加作者创建的pk队伍,`true`表示参加,`false`表示不参加 |
|
||||
| `SUPERMARKET_LOTTERY` | 东东超市抽奖 | 非必须 | 每天运行脚本是否使用金币去抽奖,`true`表示抽奖,`false`表示不抽奖 |
|
||||
| `FRUIT_BEAN_CARD` | 东东农场<br>使用水滴换豆卡 | 非必须 | 东东农场使用水滴换豆卡(如果出现限时活动时100g水换20豆,此时比浇水划算,推荐换豆),<br>`true`表示换豆(不浇水),`false`表示不换豆(继续浇水),脚本默认是浇水 |
|
||||
| `UN_SUBSCRIBES` | jd_unsubscribe.js | 非必须 | 共四个参数,换行隔开.四个参数分别表示<br>`是否取关全部商品(0表示一个都不)`,`是否取关全部店铺数(0表示一个都不)`,`遇到此商品不再进行取关`,`遇到此店铺不再进行取关`,[具体使用往下看](#取关店铺环境变量的说明) |
|
||||
| `JDJOY_HELPSELF` | 疯狂的JOY<br>循环助力 | 非必须 | 疯狂的JOY循环助力,`true`表示循环助力,`false`表示不循环助力,默认不开启循环助力。 |
|
||||
| `JDJOY_APPLYJDBEAN` | 疯狂的JOY<br>京豆兑换 | 非必须 | 疯狂的JOY京豆兑换,目前最小值为2000京豆(详情请查看活动页面-提现京豆),<br>默认数字`0`不开启京豆兑换。 |
|
||||
| `BUY_JOY_LEVEL` | 疯狂的JOY<br>购买joy等级 | 非必须 | 疯狂的JOY自动购买什么等级的JOY |
|
||||
| `MONEY_TREE_SELL_FRUIT` | 摇钱树<br>是否卖出金果 | 非必须 | 控制摇钱树脚本是否自动卖出金果兑换成金币,`true`卖出,`false`不卖出,默认`false` |
|
||||
| `FACTORAY_WANTPRODUCT_NAME` | 东东工厂<br>心仪商品 | 非必须 | 提供心仪商品名称(请尽量填写完整和别的商品有区分度),达到条件后兑换,<br>如不提供则会兑换当前所选商品 |
|
||||
| `DREAMFACTORY_FORBID_ACCOUNT`| 京喜工厂<br>控制哪个京东账号不运行此脚本 | 非必须 | 输入`1`代表第一个京东账号不运行,多个使用`&`连接,例:`1&3`代表账号1和账号3不运行京喜工厂脚本,注:输入`0`,代表全部账号不运行京喜工厂脚本 |
|
||||
| `JDFACTORY_FORBID_ACCOUNT`| 东东工厂<br>控制哪个京东账号不运行此脚本 | 非必须 | 输入`1`代表第一个京东账号不运行,多个使用`&`连接,例:`1&3`代表账号1和账号3不运行东东工厂脚本,注:输入`0`,代表全部账号不运行东东工厂脚本 |
|
||||
| `CFD_NOTIFY_CONTROL` | 京喜财富岛<br>控制是否运行脚本后通知 | 非必须 | 输入`true`为通知,不填则为不通知 |
|
||||
| `JXNC_NOTIFY_LEVEL` | 京喜农场通知控制<br>推送开关,默认1 | 非必须 | 通知级别 0=只通知成熟;1=本次获得水滴>0;2=任务执行;3=任务执行+未种植种子 |
|
||||
| `PURCHASE_SHOPS` | 执行`lxk0301/jd_scripts`仓库的脚本是否做加物品至购物车任务。默认关闭不做加购物车任务 | 非必须 | 如需做此类型任务。请设置`true`,目前东东小窝(jd_small_home.js)和跳跳乐瓜分京豆(jd_jump.js)脚本会有加购任务 |
|
||||
| `TUAN_ACTIVEID` | 京喜工厂拼团瓜分电力活动的`activeId`<br>默认读取作者设置的 | 非必须 | 如出现脚本开团提示失败:`活动已结束,请稍后再试~`,可自行抓包替换(开启抓包,进入拼团瓜分电力页面,寻找带有`tuan`的链接里面的`activeId=`) |
|
||||
|
||||
|
||||
##### 互助码的填写规则
|
||||
|
||||
> 互助码如何获取:长期活动可在jd_get_share_code.js里面查找,短期活动需运行相应脚本后,在日志里面可以找到。
|
||||
|
||||
同一个京东账号的好友互助码用@隔开,不同京东账号互助码用&或者换行隔开,下面给一个文字示例和具体互助码示例说明
|
||||
|
||||
两个账号各两个互助码的文字示例:
|
||||
|
||||
```
|
||||
京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
|
||||
```
|
||||
|
||||
两个账号各两个互助码的真实示例:
|
||||
```
|
||||
0a74407df5df4fa99672a037eec61f7e@dbb21614667246fabcfd9685b6f448f3&6fbd26cc27ac44d6a7fed34092453f77@61ff5c624949454aa88561f2cd721bf6&6fbd26cc27ac44d6a7fed34092453f77@61ff5c624949454aa88561f2cd721bf6
|
||||
```
|
||||
|
||||
|
||||
|
||||
#### 取关店铺环境变量的说明
|
||||
|
||||
> 环境变量内容的意思依次是`是否取关全部商品(0表示一个都不)`,`是否取关全部店铺数(0表示一个都不)`,`遇到此商品不再进行取关`,`遇到此店铺不再进行取关`
|
||||
|
||||
例如1:不要取关任何商品和店铺,则输入`0&0`
|
||||
例如2:我想商品遇到关键字 `iPhone12` 停止取关,店铺遇到 `Apple京东自营旗舰店` 不再取关,则输入`10&10&iPhone12&Apple京东自营旗舰店`(前面两个参数非0即可)
|
||||
|
||||
#### 关于脚本推送通知频率
|
||||
|
||||
> 如果你填写了推送通知方式中的某一种通知所需环境变量,那么脚本通知情况如下:
|
||||
|
||||
> 目前默认只有jd_fruit.js,jd_pet.js,jd_bean_sign.js,jd_bean_change.js,jd_jxnc.js这些脚本(默认)每次运行后都通知
|
||||
|
||||
```
|
||||
其余的脚本平常运行都是不通知,只有在京东cookie失效以及达到部分条件后,才会推送通知
|
||||
```
|
||||
|
||||
BIN
INS/JD/lxk0301/icon/DD_bot.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
INS/JD/lxk0301/icon/Snipaste_2020-08-28_09-31-42.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
INS/JD/lxk0301/icon/TG_PUSH1.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
INS/JD/lxk0301/icon/TG_PUSH2.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
INS/JD/lxk0301/icon/TG_PUSH3.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
INS/JD/lxk0301/icon/action1.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
INS/JD/lxk0301/icon/action2.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
INS/JD/lxk0301/icon/action3.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
INS/JD/lxk0301/icon/bark.jpg
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
INS/JD/lxk0301/icon/bean_sign_simple.jpg
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
INS/JD/lxk0301/icon/disable-action.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
INS/JD/lxk0301/icon/fork.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
INS/JD/lxk0301/icon/git1.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
INS/JD/lxk0301/icon/git10.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
INS/JD/lxk0301/icon/git11.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
INS/JD/lxk0301/icon/git12.jpg
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
INS/JD/lxk0301/icon/git13.jpg
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
INS/JD/lxk0301/icon/git14.jpg
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
INS/JD/lxk0301/icon/git2.jpg
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
INS/JD/lxk0301/icon/git3.jpg
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
INS/JD/lxk0301/icon/git4.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
INS/JD/lxk0301/icon/git5.jpg
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
INS/JD/lxk0301/icon/git6.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
INS/JD/lxk0301/icon/git7.png
Normal file
|
After Width: | Height: | Size: 160 KiB |
BIN
INS/JD/lxk0301/icon/git8.jpg
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
INS/JD/lxk0301/icon/git9.jpg
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
INS/JD/lxk0301/icon/iCloud1.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
INS/JD/lxk0301/icon/iCloud2.png
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
INS/JD/lxk0301/icon/iCloud3.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
INS/JD/lxk0301/icon/iCloud4.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
INS/JD/lxk0301/icon/iCloud5.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
INS/JD/lxk0301/icon/iCloud6.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
INS/JD/lxk0301/icon/jd1.jpg
Normal file
|
After Width: | Height: | Size: 625 KiB |
BIN
INS/JD/lxk0301/icon/jd2.jpg
Normal file
|
After Width: | Height: | Size: 208 KiB |
BIN
INS/JD/lxk0301/icon/jd3.jpg
Normal file
|
After Width: | Height: | Size: 163 KiB |
BIN
INS/JD/lxk0301/icon/jd4.jpg
Normal file
|
After Width: | Height: | Size: 256 KiB |
BIN
INS/JD/lxk0301/icon/jd5.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
INS/JD/lxk0301/icon/jd6.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
INS/JD/lxk0301/icon/jd7.png
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
INS/JD/lxk0301/icon/jd8.png
Normal file
|
After Width: | Height: | Size: 311 KiB |
BIN
INS/JD/lxk0301/icon/jd_moneyTree.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
INS/JD/lxk0301/icon/jd_pet.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
INS/JD/lxk0301/icon/photo.jpeg
Normal file
|
After Width: | Height: | Size: 666 KiB |
BIN
INS/JD/lxk0301/icon/photo.png
Normal file
|
After Width: | Height: | Size: 308 KiB |
BIN
INS/JD/lxk0301/icon/qh1.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
INS/JD/lxk0301/icon/qh2.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
INS/JD/lxk0301/icon/qh3.png
Normal file
|
After Width: | Height: | Size: 136 KiB |
BIN
INS/JD/lxk0301/icon/thanks.jpg
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
INS/JD/lxk0301/icon/txy.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
37
INS/JD/lxk0301/jdFruitShareCodes.js
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
东东农场互助码
|
||||
此文件为Node.js专用。其他用户请忽略
|
||||
支持京东N个账号
|
||||
*/
|
||||
//云服务器腾讯云函数等NOde.js用户在此处填写京东东农场的好友码。
|
||||
// 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例
|
||||
// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2
|
||||
let FruitShareCodes = [
|
||||
'0a74407df5df4fa99672a037eec61f7e@dbb21614667246fabcfd9685b6f448f3@6fbd26cc27ac44d6a7fed34092453f77@61ff5c624949454aa88561f2cd721bf6@56db8e7bc5874668ba7d5195230d067a',//账号一的好友shareCode,不同好友中间用@符号隔开
|
||||
'6fbd26cc27ac44d6a7fed34092453f77@61ff5c624949454aa88561f2cd721bf6@9c52670d52ad4e1a812f894563c746ea@8175509d82504e96828afc8b1bbb9cb3',//账号二的好友shareCode,不同好友中间用@符号隔开
|
||||
]
|
||||
|
||||
// 从日志获取互助码
|
||||
// const logShareCodes = require('./utils/jdShareCodes');
|
||||
// if (logShareCodes.FRUITSHARECODES.length > 0 && !process.env.FRUITSHARECODES) {
|
||||
// process.env.FRUITSHARECODES = logShareCodes.FRUITSHARECODES.join('&');
|
||||
// }
|
||||
|
||||
// 判断github action里面是否有东东农场互助码
|
||||
if (process.env.FRUITSHARECODES) {
|
||||
if (process.env.FRUITSHARECODES.indexOf('&') > -1) {
|
||||
console.log(`您的东东农场互助码选择的是用&隔开\n`)
|
||||
FruitShareCodes = process.env.FRUITSHARECODES.split('&');
|
||||
} else if (process.env.FRUITSHARECODES.indexOf('\n') > -1) {
|
||||
console.log(`您的东东农场互助码选择的是用换行隔开\n`)
|
||||
FruitShareCodes = process.env.FRUITSHARECODES.split('\n');
|
||||
} else {
|
||||
FruitShareCodes = process.env.FRUITSHARECODES.split();
|
||||
}
|
||||
} else {
|
||||
console.log(`由于您环境变量(FRUITSHARECODES)里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`)
|
||||
}
|
||||
for (let i = 0; i < FruitShareCodes.length; i++) {
|
||||
const index = (i + 1 === 1) ? '' : (i + 1);
|
||||
exports['FruitShareCode' + index] = FruitShareCodes[i];
|
||||
}
|
||||
42
INS/JD/lxk0301/others/submit_activity_codes.sh
Normal file
@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
|
||||
(
|
||||
#echo "resolve_username TuringLabbot"
|
||||
#echo "resolve_username LvanLamCommitCodebot"
|
||||
echo "resolve_username GitHubBot" #换成你要测试的用户或者bot,诸如@GitHubBot@后面的 GitHubBot
|
||||
sleep 5
|
||||
### @Turing_Lab_Bot
|
||||
###京喜财富岛
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes jxcfd 互助码"
|
||||
###京喜工厂
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes jxfactory 互助码"
|
||||
###种豆得豆
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes bean 互助码"
|
||||
###东东农场
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes farm 互助码"
|
||||
###东东萌宠
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes pet 互助码"
|
||||
###东东工厂
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes ddfactory 互助码"
|
||||
###闪购盲盒
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes sgmh 互助码"
|
||||
###健康社区
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes health 互助码"
|
||||
### @Commit_Code_Bot
|
||||
###JD签到领现金
|
||||
#echo "msg Commit_Code_Bot /jdcash 互助码"
|
||||
### JD赚赚
|
||||
#echo "msg Commit_Code_Bot /jdzz 互助码"
|
||||
### JD疯狂的小狗
|
||||
#echo "msg Commit_Code_Bot /jdcrazyjoy 互助码"
|
||||
|
||||
###过期活动
|
||||
###京东环球挑战赛
|
||||
#echo "msg Turing_Lab_Bot /submit_activity_codes jdglobal 互助码"
|
||||
###测试 这里填对话框或列表显示的名字,如GitHub;空格用_代替,如Telegram_抽奖助手
|
||||
echo "msg GitHub 这是一条17:45的测试消息"
|
||||
echo "safe_quit"
|
||||
###要用的地方全部取消注释#,命令行输入crontab -e,设置完cron后重连一下ssh较为有效
|
||||
) | docker exec -i telegram-cli telegram-cli -N
|
||||
31
INS/JD/lxk0301/update_list.sh
Normal file
@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
## Author: https://github.com/nevinee
|
||||
## Modified: 2021-03-18
|
||||
## Version: v1.0.5
|
||||
|
||||
## 网址、路径、文件、标记信息以及表头
|
||||
WorkDir=$(cd $(dirname $0); pwd)
|
||||
JsList=($(cd $WorkDir; ls *.js | grep -E "j[drx]_" | perl -ne "{print unless /\.bak/}"))
|
||||
FileReadme=$WorkDir/README.md
|
||||
UrlRaw=https://gitee.com/lxk0301/jd_scripts/raw/master/
|
||||
SheetHead="| 序号 | 文件 | 名称 | 活动入口 |\n| :-: | - | - | - |"
|
||||
|
||||
## 删除标记行的内容
|
||||
StartLine=$(($(grep -n "标记开始" "$FileReadme" | awk -F ":" '{print $1}') + 1))
|
||||
EndLine=$(($(grep -n "标记结束" "$FileReadme" | awk -F ":" '{print $1}') - 1))
|
||||
Tail=$(perl -ne "$. > $EndLine && print" "$FileReadme")
|
||||
perl -i -ne "{print unless $StartLine .. eof}" "$FileReadme"
|
||||
|
||||
## 生成新的表格并写入Readme
|
||||
cd $WorkDir
|
||||
Sheet=$SheetHead
|
||||
for ((i=0; i<${#JsList[*]}; i++)); do
|
||||
Name=$(grep "new Env" ${JsList[i]} | awk -F "'|\"" '{print $2}' | head -1)
|
||||
Entry=$(grep -E "^ *活动入口" ${JsList[i]} | awk -F ":|: " '{print $2}' | head -1)
|
||||
[[ -z $Entry ]] || [[ $Entry == 暂无 ]] && Entry=$(grep -E "^ *活动地址" ${JsList[i]} | awk -F ":|: " '{print $2}' | head -1)
|
||||
[[ $Entry == http* ]] && Entry="[活动地址]($Entry)"
|
||||
Raw="$UrlRaw${JsList[i]}"
|
||||
Sheet="$Sheet\n|$(($i + 1))|[${JsList[i]}]($Raw)|$Name|$Entry|"
|
||||
done
|
||||
echo -e "$Sheet\n$Tail" >> $FileReadme
|
||||
24
INS/JD/lxk0301/zero205/elecV2P.md
Normal file
@ -0,0 +1,24 @@
|
||||
#### elecV2P 环境变量使用说明
|
||||
* 1.以京东CK为例,登录elecV2P后台(默认地址:127.0.0.1:80)
|
||||
* 2.选择`JSMANAGE`,key填`CookiesJD`,下面空白处即value值按下面的格式填写,多账号以此类推,自行删减。
|
||||
```bash
|
||||
[
|
||||
{
|
||||
"userName": "jd_5bbxxx414",
|
||||
"cookie": "pt_key=xxx;pt_pin=jd_5xxx414;"
|
||||
},
|
||||
{
|
||||
"userName": "jd_739xxx89e",
|
||||
"cookie": "pt_key=xxx;pt_pin=jd_739xxx89e;"
|
||||
},
|
||||
{
|
||||
"userName": "jd_413xxxe89",
|
||||
"cookie": "pt_key=xxx;pt_pin=jd_413xxxe89;"
|
||||
}
|
||||
]
|
||||
```
|
||||
* 其他环境变量按正常填写即可
|
||||
#### elecV2P 京东任务订阅地址
|
||||
`https://raw.githubusercontent.com/zero205/JD_tencent_scf/main/jd_task.json`
|
||||
#### 订阅地址使用说明
|
||||
* 登录elecV2P后台,选择`TASK`,选择添加订阅任务,输入上面的订阅地址,点击获取内容,点击全部添加即可
|
||||