├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ └── feature_request.yml
└── workflows
│ ├── close_inactive_issues.yml
│ ├── close_invaild_issues.yml
│ ├── close_question_issues.yml
│ └── issue_question.yml
├── .gitignore
├── CHANGELOGS.MD
├── Direct.list
├── GetCookie.sgmodule
├── LICENSE
├── MitmAllHostnames.sgmodule
├── Proxy.list
├── QQPet
└── lkQQPet.js
├── QQVip
└── qqVipCheckIn.js
├── README.MD
├── README_en.MD
├── Reject.list
├── Scriptable
├── 10000.js
├── README.MD
├── ScriptableToolKit.js
├── ScriptableToolKit.min.js
├── example
│ └── ScriptableToolKitDemo.js
├── ugstoolkit
└── widgetCutBg.js
├── Scripts.sgmodule
├── Snap.list
├── Ssid.sgmodule
├── Tasks-removed.sgmodule
├── Tasks.sgmodule
├── ali
└── aliYunPanCheckIn.js
├── bilibili
├── bangumiMonitor.js
└── privilegeReceive.js
├── bing
└── bingPoint.js
├── boxjs-empty.bmp
├── boxjs.sysapps.json
├── doc
├── icon
│ ├── ChinaTelecom.png
│ ├── ChinaTelecom_logo.png
│ ├── ChinaTelecom_logo.psd
│ ├── ChinaTelecom_logo_blue.png
│ ├── ChinaTelecom_logo_orange.png
│ ├── aliYunPan.png
│ ├── aliYunPana.png
│ ├── bilibiliBigVip.svg
│ ├── bingPoint.png
│ ├── eu.org.png
│ ├── hifinisignin-dark.png
│ ├── hifinisignin.png
│ ├── jump.png
│ ├── miyoushe.png
│ ├── pupu.png
│ ├── pupua.png
│ └── zzz.png
└── pic
│ ├── 10086.jpeg
│ ├── toolkitdemo-show-phone.gif
│ ├── toolkitdemo-show.gif
│ └── ugtoolkit.jpg
├── douyu
├── streamQuality.js
└── yubaSign.js
├── empty.app.boxjs.json
├── epic
└── freeGames.js
├── github
└── githubMonitor.js
├── hifini
└── hifiniSign.js
├── jd
├── jd_cookie_search.js
├── ql_api.js
└── ql_sync_box.js
├── jump
└── jumpPrice.js
├── lowking.boxjs.json
├── lowking.boxjs.removed.json
├── mihoyo
├── miyousheCustom.js
└── zzz.js
├── others.boxjs.json
├── others
└── eu.org.js
├── pupu
└── pupuCheckIn.js
├── self
├── MiyousheCustom.sgmodule
├── ZzzCapture.sgmodule
├── add2Favorite.scpt
├── fadeVolume.scpt
├── jable.js
└── removeTrackFromAllPlaylist.scpt
├── sony
└── sonyClub.js
├── util
├── README.MD
├── Ssid.js
├── ToolKit.js
├── ToolKit.min.js
├── example
│ ├── README.MD
│ └── ToolKitDemo.js
├── qqUtil.js
├── qqUtil.min.js
├── ugtoolkit
├── util.js
└── util.min.js
└── weibo
├── weiboST.js
└── weiboSTCookie.js
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: "问题反馈"
2 | description: 问题反馈
3 | title: "[BUG]"
4 | labels: [bug]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | 感谢您花时间填写此错误报告,请**务必确认您的issue不是重复的且不是因为版本问题**
10 |
11 | - type: checkboxes
12 | attributes:
13 | label: 您必须确认以下所有内容
14 | description: |
15 | 您必须勾选以下所有内容,否则您的issue可能会被直接关闭。
16 | options:
17 | - label: |
18 | 我已经阅读了脚本开头的注释。
19 | - label: |
20 | 我确定没有重复的issue。
21 | - label: |
22 | 我确定是脚本的问题,而不是其他原因(例如,```网络```,```操作```等)。
23 | - label: |
24 | 我确定这个问题在最新版本中没有被修复。
25 |
26 | - type: input
27 | id: version
28 | attributes:
29 | label: 版本
30 | description: |
31 | 您使用的是哪个版本的脚本?请填写具体的版本号。
32 | placeholder: v1.xx.xx
33 | validations:
34 | required: true
35 | - type: textarea
36 | id: bug-description
37 | attributes:
38 | label: 问题描述
39 | validations:
40 | required: true
41 | - type: textarea
42 | id: logs
43 | attributes:
44 | label: 日志
45 | description: |
46 | 请复制粘贴错误日志。
47 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: "需求请求"
2 | description: 需求请求
3 | title: "[FEAT]"
4 | labels: [enhancement]
5 | body:
6 | - type: checkboxes
7 | attributes:
8 | label: 您必须确认以下所有内容
9 | description: 根据实际情况选择
10 | options:
11 | - label: 我确定没有重复的issue。
12 | - label: 我确定需求未实现。
13 | - label: 我确定需求合理。
14 | - type: textarea
15 | id: feature-description
16 | attributes:
17 | label: 需求描述
18 | validations:
19 | required: true
20 | - type: textarea
21 | id: suggested-solution
22 | attributes:
23 | label: 实现思路
24 | description: |
25 | 实现此需求的解决思路。
26 | - type: textarea
27 | id: remark
28 | attributes:
29 | label: 备注
30 | description: |
31 | 相关的任何其他上下文或截图,或者你觉得有帮助的信息
32 |
--------------------------------------------------------------------------------
/.github/workflows/close_inactive_issues.yml:
--------------------------------------------------------------------------------
1 | name: Close inactive issues
2 | on:
3 | schedule:
4 | - cron: "0 0 * * *"
5 |
6 | jobs:
7 | close-issues:
8 | runs-on: ubuntu-latest
9 | permissions:
10 | issues: write
11 | pull-requests: write
12 | steps:
13 | - uses: actions/stale@v5
14 | with:
15 | days-before-issue-stale: ${{ secrets.DBIS }}
16 | days-before-issue-close: ${{ secrets.DBIC }}
17 | stale-issue-label: "stale"
18 | stale-issue-message: |
19 | ci: This issue is stale because it has been open for ${{ secrets.DBIS }} days with no activity.
20 | close-issue-message: |
21 | ci: This issue was closed because it has been inactive for ${{ secrets.DBIC }} days since being marked as stale.
22 | days-before-pr-stale: -1
23 | days-before-pr-close: -1
24 | repo-token: ${{ secrets.TOKEN }}
25 |
--------------------------------------------------------------------------------
/.github/workflows/close_invaild_issues.yml:
--------------------------------------------------------------------------------
1 | name: Close invaild issues
2 |
3 | on:
4 | issues:
5 | types: [labeled]
6 |
7 | jobs:
8 | create-comment:
9 | runs-on: ubuntu-latest
10 | if: github.event.label.name == 'invalid'
11 | steps:
12 | - name: Create comment
13 | uses: actions-cool/issues-helper@v3
14 | with:
15 | actions: 'create-comment'
16 | token: ${{ secrets.TOKEN }}
17 | issue-number: ${{ github.event.issue.number }}
18 | body: |
19 | Hello @${{ github.event.issue.user.login }}, your issue is invalid and will be closed.
20 | 你好 @${{ github.event.issue.user.login }},你的issue无效,将被关闭。
21 | - name: Close issue
22 | uses: actions-cool/issues-helper@v3
23 | with:
24 | actions: 'close-issue'
25 | token: ${{ secrets.TOKEN }}
--------------------------------------------------------------------------------
/.github/workflows/close_question_issues.yml:
--------------------------------------------------------------------------------
1 | name: Close question issues
2 |
3 | on:
4 | schedule:
5 | - cron: "0 0 */1 * *"
6 | workflow_dispatch:
7 |
8 | jobs:
9 | close-need-info:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: close-issues
13 | uses: actions-cool/issues-helper@v3
14 | with:
15 | actions: 'close-issues'
16 | token: ${{ secrets.TOKEN }}
17 | labels: 'question'
18 | inactive-day: 3
19 | close-reason: 'not_planned'
20 | body: |
21 | Hello @${{ github.event.issue.user.login }}, this issue was closed due to no activities in 3 days.
22 | 你好 @${{ github.event.issue.user.login }},此issue因超过3天未回复被关闭。
--------------------------------------------------------------------------------
/.github/workflows/issue_question.yml:
--------------------------------------------------------------------------------
1 | name: Issue question
2 |
3 | on:
4 | issues:
5 | types: [labeled]
6 |
7 | jobs:
8 | create-comment:
9 | runs-on: ubuntu-latest
10 | if: github.event.label.name == 'question'
11 | steps:
12 | - name: Create comment
13 | uses: actions-cool/issues-helper@v3.5.1
14 | with:
15 | actions: 'create-comment'
16 | token: ${{ secrets.TOKEN }}
17 | issue-number: ${{ github.event.issue.number }}
18 | body: |
19 | Hello @${{ github.event.issue.user.login }}, please input issue by template and add detail. It will be closed if no activities in 3 days.
20 | 你好 @${{ github.event.issue.user.login }},请按照issue模板填写, 3天内未回复issue自动关闭。
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | /target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 |
5 | ### STS ###
6 | .settings/
7 | .apt_generated
8 | .classpath
9 | .factorypath
10 | .project
11 | .settings
12 | .springBeans
13 | .sts4-cache
14 |
15 | ### IntelliJ IDEA ###
16 | .idea
17 | *.iws
18 | *.iml
19 | *.ipr
20 | *.pid
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /build/
25 | /nbbuild/
26 | /dist/
27 | /nbdist/
28 | /.nb-gradle/
29 | /logs/
30 | /pay-service/.gitignore
31 |
32 | ### node ###
33 | package-lock.json
34 | node_modules
35 |
36 | ### others
37 | github.js
38 | myGithub.js
39 | lk*.dat
40 | lk*.boxjs.json
41 | github.json
42 | .wakatime-project
43 | test/*
44 | *.bak
45 | jd/
46 |
--------------------------------------------------------------------------------
/CHANGELOGS.MD:
--------------------------------------------------------------------------------
1 | # ChangeLogs
2 | #### 2021-12-14
3 | > ##### 新增
4 | > - hifini签到
5 |
6 | #### 2021-02-18
7 | > ##### 新增
8 | > - Scriptable中国电信查询
9 | > ##### 更新
10 | > - ScriptableToolKit支持自定义操作入口
11 |
12 | #### 2020-12-14
13 | > ##### 新增
14 | > - 朴朴签到
15 |
16 | #### 2020-11-09
17 | > ##### 新增
18 | > - 添加scriptable相关脚本和ToolKit
19 |
20 | #### 2020-10-08
21 | > ##### 新增
22 | > - 哔哩哔哩追番监控添加追剧监控
23 |
24 | #### 2020-10-08
25 | > ##### 新增
26 | > - 上传ToolKit压缩工具脚本,便于一键压缩替换.js中的代码
27 |
28 | #### 2020-09-12
29 | > ##### 更新
30 | > - ToolKit支持quanx和surge通知跳转url以及多媒体文件(surge暂无)
31 |
32 | #### 2020-09-01
33 | > ##### 新增
34 | > - 新增QQ萌宠签到获取成长值
35 |
36 | #### 2020-08-28
37 | > ##### 新增
38 | > - 新增斗鱼鱼吧签到
39 | > ##### 更新
40 | > - 更新ToolKit,内容如下:
41 | > > 1. 调整传入options.httpApi的格式校验
42 | > > 2. 发送到ios surge允许传入超时参数:node ToolKitDemo.js p 5,最后一个参数"5"单位秒
43 | > > 3. 加入prependNotifyInfo()方法,便于脚本最后统计执行情况的时候把汇总信息放在第一行
44 | > > 4. 完善boxJsJsonBuilder(),构建更全的配置
45 |
46 | #### 2020-07-24
47 | > ##### 更新
48 | > - ToolKit支持surge新特性http api
49 | > > 1. 写法参考[ToolKitDemo](https://github.com/lowking/Scripts/blob/master/util/example/useToolKitDemo.js),之后就可以在脚本所在的目录下执行```node ToolKitDemo.js p```,记得命令尾巴加空格p,就可以把当前这个脚本发送到手机端测试了
50 | > > 2. 执行```node ToolKitDemo.js```可在当前目录下生成BoxJs配置文件,详细实现可以查看ToolKit中的boxJsJsonBuilder方法
51 |
52 | #### 2020-07-20
53 | > ##### 更新
54 | > - ToolKit新增randomString和autoComplete方法
55 | > - QQ会员成长值签到改造,使用ToolKit
56 |
57 | #### 2020-07-19
58 | > ##### 新增
59 | > - 索尼俱乐部签到,支持自动登录签到
60 | > - 新增ToolKit,根据自己的习惯整合各个开发者而形成的工具包(@NobyDa, @chavyleung)
61 |
62 | #### 2020-07-10
63 | > ##### 更新
64 | > - 订阅转换器引用[KOP-XIAO的资源转换器](https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/resource-parser.js)(我就简单的支持了surge,就测试过vmess格式的订阅)
65 |
66 | #### 2020-07-08
67 | > ##### 新增
68 | > - 添加Wi-Fi助手(从gist迁移过来,并汉化通知)
69 | #### 2020-07-02
70 | > ##### 新增
71 | > - [Wi-Fi助手模块(Surge专用)](https://gist.githubusercontent.com/lowking/3aa8748416e938528967885bc403b2f1/raw/ssid.sgmodule):在boxjs中配置需直连的ssid
72 | > - 自用GetCookie、Tasks模块
73 | > - 订阅转换器(目前功能简陋,自用)
74 |
75 | > ##### 更新
76 | > - QQ会员成长值签到支持好友列表点赞(每天20点)
77 | > - 微博超话签到支持获取超话关注列表,批量签到
78 |
79 | #### 2020-06-16
80 | > ##### 新增
81 | > - QQ会员成长值签到
82 | > - 微博超话签到(原作者NavePnow,因为通知太多进行修改,同时重构了代码)
83 | > - 微博超话签到支持获取关注列表(要是关注很多不知道行不行,没帐号测试)
84 | > - 微博超话签到支持手动清除cookie(isClearCookie改成true之后运行一次脚本)
85 |
--------------------------------------------------------------------------------
/Direct.list:
--------------------------------------------------------------------------------
1 | DOMAIN-SUFFIX,hkmytv.com
2 | DOMAIN-SUFFIX,bimiacg2.net
3 | DOMAIN-SUFFIX,cmy.network
4 | DOMAIN-SUFFIX,rewards.bing.com
5 | DOMAIN-SUFFIX,routerlogin.net
6 | # > plex
7 | DOMAIN,v4.plex.tv
8 | DOMAIN-SUFFIX,amazonaws.com
9 | DOMAIN-SUFFIX,plex.direct
10 |
--------------------------------------------------------------------------------
/GetCookie.sgmodule:
--------------------------------------------------------------------------------
1 | #!name=GetCookie by lowking. Self-use
2 | #!desc=该模块自用,获取cookie合集
3 | #!category=Self
4 |
5 | [Script]
6 | 115-cookie = type=http-request,pattern=^https?:\/\/proapi\.115\.com\/ios\/user\/takespc\?,script-path=https://raw.githubusercontent.com/zZPiglet/Task/master/115/115.js
7 |
8 | 贴吧-cookie = script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/tieba/tieba.cookie.js,type=http-request,pattern=^https?:\/\/tieba\.baidu\.com\/?.?
9 |
10 | 万达电影-cookie = type=http-request,pattern=^https:\/\/user-api-prd-mx\.wandafilm\.com\/user\/islogin\.api,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/wanda/wanda.cookie.js,debug=true
11 |
12 | #腾讯视频-cookie = script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/videoqq/videoqq.cookie.js,type=http-request,pattern=^https:\/\/access.video.qq.com\/user\/auth_refresh
13 |
14 | 智行火车票-cookie = script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/zxhc/zxhc.cookie.js,requires-body=true,type=http-request,pattern=^https:\/\/m\.ctrip\.com/restapi/soa2/14593/json/attendanceDay?
15 |
16 | 美团-cookie = script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/meituan/meituan.cookie.js,requires-body=true,type=http-request,pattern=^https:\/\/i.meituan.com\/evolve\/signin\/signpost\/
17 |
18 | 芒果TV-cookie = script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/mgtv/mgtv.cookie.js,type=http-request,pattern=^https:\/\/credits.bz.mgtv.com\/user\/creditsTake
19 |
20 | 斗鱼鱼吧-cookie = type=http-request,pattern=^https://yuba.douyu.com/wbapi/web/group/myFollow,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/douyu/yubaSign.js
21 |
22 | 什么值得买-cookie = type=http-request,pattern=^https:\/\/www\.smzdm\.com\/?.?,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/smzdm/smzdm.cookie.js
23 |
24 | 爱奇艺-cookie = type=http-request,pattern=^https:\/\/passport\.iqiyi\.com\/apis\/user\/,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/iQIYI-DailyBonus/iQIYI.js
25 |
26 | 哔哩哔哩番剧监控-cookie = type=http-request,pattern=https?:\/\/app.bilibili.com\/x\/v2\/space\/bangumi,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/bilibili/bangumiMonitor.js
27 |
28 | 吾爱破解签到-cookie = type=http-request,pattern=https:\/\/www\.52pojie\.cn\/home\.php\?,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/52pojie-DailyBonus/52pojie.js
29 |
30 | QQ萌宠-cookie = requires-body=1,type=http-response,pattern=https:\/\/qqpet.jwetech.com\/api\/authorizations,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/QQPet/lkQQPet.js
31 |
32 | 10086-cookie = type=http-request,pattern=^https:\/\/clientaccess.10086.cn\/biz-orange\/LN\/uamrandcodelogin\/autoLogin,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/10086/10086.fee.cookie.js,requires-body=true,debug=true
33 | 10086-cookie = type=http-request,pattern=^https:\/\/clientaccess.10086.cn\/biz-orange\/BN\/realFeeQuery\/getRealFee,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/10086/10086.fee.cookie.js,requires-body=true,debug=true
34 |
35 | 朴朴签到cookie = requires-body=1,type=http-response,pattern=https:\/\/cauth.pupuapi.com\/clientauth\/user\/verify_login,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/pupu/pupuCheckIn.js
36 |
37 | hifini签到cookie = type=http-request,pattern=https:\/\/www.hifini.com\/my.htm,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/hifini/hifiniSign.js
38 |
39 | 阿里云盘签到cookie = requires-body=1,type=http-response,pattern=https:\/\/auth.(aliyundrive|alipan).com\/v2\/account\/token,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/ali/aliYunPanCheckIn.js
40 |
41 | 顺丰速运cookie = requires-body=1,type=http-request, pattern=^https:\/\/ccsp-egmas.sf-express.com\/cx-app-member\/member\/app\/user\/universalSign,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.cookie.js
42 |
43 | bing-cookie = requires-body=0,type=http-request, pattern=^https:\/\/rewards\.bing\.com,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/bing/bingPoint.js
44 |
45 | Jump游戏价格监控cookie = requires-body=0,type=http-request,pattern=https:\/\/switch\.jumpvg\.com\/jump\/app\/conf,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/jump/jumpPrice.js
46 |
47 | [MITM]
48 | hostname = %APPEND% switch.jumpvg.com, rewards.bing.com, ccsp-egmas.sf-express.com, auth.alipan.com, *.hifini.com, cauth.pupuapi.com, qqpet.jwetech.com, clientaccess.10086.cn, www.52pojie.cn, *.bilibili.com, passport.iqiyi.com, *.smzdm.com, yuba.douyu.com, tieba.baidu.com, as.xiaojukeji.com, user-api-prd-mx.wandafilm.com, api.m.jd.com, *.video.qq.com, *.bilibili.com, m.ctrip.com, i.meituan.com, credits.bz.mgtv.com
49 |
--------------------------------------------------------------------------------
/MitmAllHostnames.sgmodule:
--------------------------------------------------------------------------------
1 | #!name=MitMAllHostnames
2 | #!desc=Perform MitM on all hostnames with port 443, except those to Apple and other common sites which can't be inspected. You still need configure CA certificate and enable the main switch of MitM.
3 |
4 | [MITM]
5 | hostname = -*.apple.com, -*.icloud.com, -*.mzstatic.com, -*.crashlytics.com, -*.facebook.com, -*.instagram.com, *
--------------------------------------------------------------------------------
/Proxy.list:
--------------------------------------------------------------------------------
1 | # > 18mag
2 | DOMAIN,18mag.net
3 | # > 中国移动
4 | DOMAIN,clientaccess.10086.cn
5 | # > da
6 | DOMAIN,deviantart.com
7 | # > plex
8 | DOMAIN,downloads.plex.tv
9 | DOMAIN,metadata-static.plex.tv
10 | DOMAIN,metadata.provider.plex.tv
11 | DOMAIN,meta.plex.tv
12 | # > cdn.jsdelivr.net
13 | DOMAIN,cdn.jsdelivr.net
14 |
--------------------------------------------------------------------------------
/README.MD:
--------------------------------------------------------------------------------
1 | # Scripts
2 | 
3 | [](https://github.com/996icu/996.ICU/blob/master/LICENSE)
4 | [](https://github.com/Orz-3)
5 | [](https://github.com/58xinian)
6 | [](https://github.com/lowking/Scripts/actions/workflows/close_inactive_issues.yml)
7 |
8 | ## [English](https://github.com/lowking/Scripts/blob/master/README_en.MD)
9 |
10 | ## 维护列表
11 | 🟢在用 🟡未在用 🔴有问题
12 | ### Scripts(Surge, Quantumult X, Loon, nodeJs)
13 |
14 | 🟢
15 |
16 | 🟡
17 |
18 | 🟡
19 |
20 | 🟡
21 |
22 | 🟡
23 |
24 | 🟡
25 |
26 | 🟡
27 |
28 | 🟢
29 |
30 | 🟡
31 |
32 | 🔴
33 |
34 | 🟢
35 |
36 | 🔴
37 |
38 | 🟢
39 |
40 | 🟢
41 |
42 | 🟢
43 |
44 | ### Scriptable
45 |
🟢
46 |
47 | ### Applescript
48 | * 将当前播放的歌曲添加到指定播放列表。[点击前往](https://github.com/lowking/Scripts/blob/master/self/add2Favorite.scpt)
49 | * 将当前播放的歌曲添加到指定播放列表并从其他播放列表移除。[点击前往](https://github.com/lowking/Scripts/blob/master/self/removeTrackFromAllPlaylist.scpt)
50 | * 音乐app音量淡入淡出。2次快速触发实现暂停,单次触发则在最大/最小音量直接切换[点击前往](https://github.com/lowking/Scripts/blob/master/self/fadeVolume.scpt)
51 |
52 | ## 许可
53 | Copyright © 2020-present lowking. Licensed under [GPL](https://github.com/lowking/Scripts/blob/master/LICENSE) License.
54 |
--------------------------------------------------------------------------------
/README_en.MD:
--------------------------------------------------------------------------------
1 | # Scripts
2 | 
3 | [](https://github.com/996icu/996.ICU/blob/master/LICENSE)
4 | [](https://github.com/Orz-3)
5 | [](https://github.com/58xinian)
6 | [](https://github.com/lowking/Scripts/actions/workflows/close_inactive_issues.yml)
7 |
8 | ## [中文](https://github.com/lowking/Scripts/blob/master/README.MD)
9 |
10 | ## Maintenance List
11 | 🟢In use 🟡Not in use 🔴Problem
12 | ### Scripts(Surge, Quantumult X, Loon, nodeJs)
13 |
14 | 🟢
15 |
16 | 🟡
17 |
18 | 🟡
19 |
20 | 🟡
21 |
22 | 🟡
23 |
24 | 🟡
25 |
26 | 🟡
27 |
28 | 🟢
29 |
30 | 🟡
31 |
32 | 🔴
33 |
34 | 🟢
35 |
36 | 🔴
37 |
38 | 🟢
39 |
40 | 🟢
41 |
42 | 🟢
43 |
44 | ### Scriptable
45 |
🟢
46 |
47 | ### Applescript
48 | * Adds the currently playing song to the specified playlist. [here](https://github.com/lowking/Scripts/blob/master/self/add2Favorite.scpt)
49 | * Adds the currently playing song to the specified playlist and removes it from other playlists. [here](https://github.com/lowking/Scripts/blob/master/self/removeTrackFromAllPlaylist.scpt)
50 | * Music app volume fades in and out. Two quick triggers pause, and a single trigger switches directly at the maximum/minimum volume. [here](https://github.com/lowking/Scripts/blob/master/self/fadeVolume.scpt)
51 |
52 | ## LICENSE
53 | Copyright © 2020-present lowking. Licensed under [GPL](https://github.com/lowking/Scripts/blob/master/LICENSE) License.
54 |
--------------------------------------------------------------------------------
/Reject.list:
--------------------------------------------------------------------------------
1 | DOMAIN-SUFFIX,ntb.lanjie100.com
--------------------------------------------------------------------------------
/Scriptable/README.MD:
--------------------------------------------------------------------------------
1 | # Scriptsable脚本说明
2 | > #### 10086
3 | > - 根据[GideonSenku](https://github.com/GideonSenku)和[mzeryck](https://github.com/mzeryck)两位作者脚本整合而成
4 | > - app内点击运行抠图,实现伪透明背景(效果看下图)
5 | > - 脚本内可以修改lang变量修改语言(已经调整成根据手机语言环境设置)
6 |
7 | 
8 |
9 | > #### widgetCutBg
10 | > - 该脚本已经集成到ScriptableToolKit中,具体使用方法查看example中的demo
11 | > - 该脚本收入自[mzeryck](https://github.com/mzeryck)这位作者,本人汉化而成(目前只有中文和英文,欢迎其他国家开发者翻译pr)
12 | > - 以上脚本均通过整个该脚本实现伪背景透明效果,有兴趣的自行研究
13 |
--------------------------------------------------------------------------------
/Scriptable/ScriptableToolKit.min.js:
--------------------------------------------------------------------------------
1 | function ScriptableToolKit(scriptName,scriptId,options){return new class{constructor(scriptName,scriptId,options){this.isLimited=false;this.checkLimit();this.local=FileManager.local();this.icloud=FileManager.iCloud();this.curDateCache=this.local.joinPath(this.local.documentsDirectory(),"curDateCache");this.options=options;this.tgEscapeCharMapping={"&":"&"};this.userAgent=`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15`;this.prefix=`lk`;this.name=scriptName;this.id=scriptId;this.data=null;this.dataFile=`${this.prefix}${this.id}.json`;this.bgImgPath=`${this.prefix}${this.id}Bg.jpg`;this.bgImgPath=this.local.joinPath(this.local.documentsDirectory(),this.bgImgPath);this.lang=Device.language();this.msg={zh:{s0:"在开始之前,先进入主屏幕,进入图标排列模式。滑到最右边的空白页,并进行截图。",s1:"看起来你选择的图片不是iPhone的截图,或者你的iPhone不支持。请换一张图片再试一次。",s2:"你想创建什么尺寸的widget?",s3:"你想把widget放在哪里?",s4:" (请注意,您的设备只支持两行小部件,所以中间和底部的选项是一样的)。",s5:"widget的背景图已裁切完成,想在Scriptable内部使用还是导出到相册?",s6:"已经截图,继续",s7:"退出去截图",s8:"小",s9:"中",s10:"大",s11:"顶部左边",s12:"顶部右边",s13:"中间左边",s14:"中间右边",s15:"底部左边",s16:"底部右边",s17:"顶部",s18:"中间",s19:"底部",s20:"在Scriptable内部使用",s21:"导出到相册",s22:"填写遮罩层颜色。(格式:#000000)",s23:"颜色(格式:#000000)",s24:"填写遮罩层不透明度(0-1之间)",s25:"0-1之间",s26:"确定",s27:"取消",s28:"预览widget",s29:"设置widget背景",s30:"入口",s31:"你用的是哪个型号?",s32:"退出",s33:"清除缓存",s34:"开始清除缓存",s35:"清除缓存完成"},en:{s0:"Before you start, go to your home screen and enter wiggle mode. Scroll to the empty page on the far right and take a screenshot.",s1:"It looks like you selected an image that isn't an iPhone screenshot, or your iPhone is not supported. Try again with a different image.",s2:"What size of widget are you creating?",s3:"What position will it be in?",s4:" (Note that your device only supports two rows of widgets, so the middle and bottom options are the same.)",s5:"Your widget background is ready. Would you like to use it in a Scriptable widget or export the image?",s6:"Continue",s7:"Exit to Take Screenshot",s8:"Small",s9:"Medium",s10:"Large",s11:"Top left",s12:"Top right",s13:"Middle left",s14:"Middle right",s15:"Bottom left",s16:"Bottom right",s17:"Top",s18:"Middle",s19:"Bottom",s20:"Use in Scriptable",s21:"Export to Photos",s22:"Fill in the mask layer color. (Format: #000000)",s23:"Color.(Format: #000000)",s24:"Fill in the mask layer opacity (between 0-1)",s25:"between 0-1",s26:"Confirm",s27:"Cancel",s28:"Preview widget",s29:"Setting widget background",s30:"ENTER",s31:"What type of iPhone do you have?",s32:"Exit",s33:"Clean cache",s34:"Clean cache started",s35:"Clean cache finished"}};this.curLang=this.msg[this.lang]||this.msg.en;this.isSaveLog=this.getResultByKey(`${this.prefix}IsSaveLog${this.id}`,false);this.isEnableLog=this.getResultByKey(`${this.prefix}IsEnableLog${this.id}`,true);this.logDir=this.icloud.documentsDirectory()+"/lklogs/"+this.id;this.logSeparator="\n██";this.now=new Date;this.execStatus=true;this.notifyInfo=[];this.operations=[]}async checkLimit(){const lastRunningTime=await this.getVal(`${this.prefix}LastRunningTime${this.id}`,"local",0);const runLimitNum=this.getResultByKey(`${this.prefix}RunLimitNum${this.id}`,3e5);this.log(`上次运行时间:${lastRunningTime},运行频率限制:${runLimitNum}`);if(lastRunningTime>=0){if(this.now.getTime()-lastRunningTime<=runLimitNum){this.appendNotifyInfo("限制运行");this.isLimited=true}else{await this.setVal(`${this.prefix}LastRunningTime${this.id}`,this.now.getTime(),"local")}}return this.isLimited}getResultByKey(key,defaultValue){if(!this.options){return defaultValue}const val=this.options[key];if(this.isEmpty(val)){return defaultValue}else{return val}}appendNotifyInfo(info,type){if(type==1){this.notifyInfo=info}else{this.notifyInfo.push(`${this.logSeparator}${this.formatDate(new Date,"yyyy-MM-dd HH:mm:ss.S")}█${info}`)}}saveLog(){if(this.isSaveLog){let message;if(Array.isArray(this.notifyInfo)){message=this.notifyInfo.join("")}else{message=this.notifyInfo}if(!this.icloud.isDirectory(this.logDir)){this.icloud.createDirectory(this.logDir,true)}this.icloud.writeString(`${this.logDir}/${this.formatDate(this.now,"yyyyMMddHHmmss")}.log`,message)}}prependNotifyInfo(info){this.notifyInfo.splice(0,0,info)}execFail(){this.execStatus=false}sleep(time){return new Promise(resolve=>setTimeout(resolve,time))}log(message){if(this.isEnableLog)console.log(`${this.logSeparator}${JSON.stringify(message)}`);this.appendNotifyInfo(message)}logErr(message){this.execStatus=false;if(this.isEnableLog){console.warn(`${this.logSeparator}${this.name}执行异常:`);console.warn(message);console.warn(`\n${message.message}`)}}getContainer(key){return key=="local"?this.local:this.icloud}async getVal(key,container,defaultValue){let containerInstance=this.getContainer(container);let data="";try{let realDataFile=containerInstance.joinPath(containerInstance.documentsDirectory(),this.dataFile);if(!containerInstance.fileExists(realDataFile)){await this.setVal(key,defaultValue,container);return defaultValue}data=await containerInstance.readString(realDataFile);data=JSON.parse(data)}catch(e){throw e}if(data.hasOwnProperty(key)){return data[key]}else{await this.setVal(key,defaultValue,container);return defaultValue}}async getDataFile(container){let containerInstance=this.getContainer(container);let data="";try{let realDataFile=containerInstance.joinPath(containerInstance.documentsDirectory(),this.dataFile);if(!containerInstance.fileExists(realDataFile)){return Promise.resolve("")}data=await containerInstance.readString(realDataFile)}catch(e){throw e}return Promise.resolve(data)}async saveImage(fileName,image,container){let containerInstance=this.getContainer(container);let imagePath=containerInstance.joinPath(containerInstance.documentsDirectory(),`${this.prefix}${this.id}/${fileName}`);let imageDir=imagePath.substring(0,imagePath.lastIndexOf("/")+1);if(!containerInstance.isDirectory(imageDir)){containerInstance.createDirectory(imageDir,true)}containerInstance.writeImage(imagePath,image)}async getImage(fileName,container){let containerInstance=this.getContainer(container);let imagePath=containerInstance.joinPath(containerInstance.documentsDirectory(),`${this.prefix}${this.id}/${fileName}`);if(!containerInstance.fileExists(imagePath)){this.logErr(`file not exist: ${imagePath}`);return false}return await containerInstance.readImage(imagePath)}async setVal(key,val,container){let containerInstance=this.getContainer(container);let data;let realDataFile=containerInstance.joinPath(containerInstance.documentsDirectory(),this.dataFile);try{if(!containerInstance.fileExists(realDataFile)){data={}}else{data=await containerInstance.readString(realDataFile);data=JSON.parse(data)}}catch(e){data={}}data[key]=val;await containerInstance.writeString(realDataFile,JSON.stringify(data))}async get(options,callback=(()=>{})){let request=new Request("");request.url=options.url;request.method="GET";request.headers=options.headers;try{const result=await request.loadString();callback(request.response,result);return result}catch(e){this.logErr(e);callback(undefined,undefined)}}async post(options,callback=(()=>{})){let request=new Request("");request.url=options.url;request.body=options.body;request.method="POST";request.headers=options.headers;request.timeout=5e3;try{const result=await request.loadString();callback(request.response,result);return result}catch(e){this.logErr(e);callback(undefined,undefined)}}async loadScript({scriptName:scriptName,url:url}){this.log(`获取脚本【${scriptName}】`);const content=await this.get({url:url});this.icloud.writeString(`${this.icloud.documentsDirectory()}/${scriptName}.js`,content);this.log(`获取脚本【${scriptName}】完成🎉`)}require({scriptName:scriptName,url:url="",reload:reload=false}){if(this.icloud.fileExists(this.icloud.joinPath(this.icloud.documentsDirectory(),`${scriptName}.js`))&&!reload){this.log(`引用脚本【${scriptName}】`);return importModule(scriptName)}else{this.loadScript({scriptName:scriptName,url:url});this.log(`引用脚本【${scriptName}】`);return importModule(scriptName)}}async generateInputAlert(message,field,defaultValue){let result=[];let alert=new Alert;alert.message=message;alert.addTextField(field,defaultValue);alert.addCancelAction(this.curLang.s27);alert.addAction(this.curLang.s26);result[0]=await alert.presentAlert();result[1]=alert.textFieldValue(0);return result}async generateAlert(message,options){let alert=new Alert;alert.message=message;for(const option of options){alert.addAction(option)}return await alert.presentAlert()}isEmpty(obj){return typeof obj=="undefined"||obj==null||obj==""||obj=="null"}isWorkingDays(now,workingDaysFlag="curlybraces",holidayFlag="gamecontroller"){return new Promise(async(resolve,reject)=>{let sp="≈";const d=this.formatDate(now,"yyyy-MM-dd");let resultStr=0;try{let curDate=await this.getVal("curDateCache","local","fff");let curDateErrorTime=await this.getVal("curDateCacheErrorTime","local",this.now.getTime());let isPreError=!this.isEmpty(curDateErrorTime)&&Number(curDateErrorTime)+5*60*1e3{if(data.indexOf("<")==0){resultStr="❌"}else{resultStr=JSON.parse(data);if(resultStr.code==-1){resultStr="❌"}else{resultStr=resultStr.type.type}}})}}catch(e){resultStr="❌";this.logErr(e)}finally{await this.setVal("curDateCache",`${d}${sp}${resultStr}`,"local");if(resultStr=="❌"){resolve(resultStr);this.log("写入运行错误时间,5分钟后重新请求!");this.setVal("curDateCache","","local");this.setVal("curDateCacheErrorTime",`${this.now.getTime()}`,"local")}else{this.setVal("curDateCacheErrorTime","","local");this.setVal("curDateCache",`${d}${sp}${resultStr}`,"local");resolve(resultStr==0||resultStr==3?workingDaysFlag:holidayFlag)}}})}randomString(len){len=len||32;var $chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";var maxPos=$chars.length;var pwd="";for(let i=0;i{return item.name[this.lang]});let customEnterCallback=customEnter.map((item,index)=>{return item.callback});if(isReset){options=customEnterNames}else{this.operations.push({callback:main});this.operations.push({callback:function(){$.widgetCutBg()}});this.operations.push({callback:function(){$.cleanCache()}});options=options.concat(customEnterNames)}customEnterCallback.forEach(callback=>{this.operations.push({callback:callback})})}options.push(this.curLang.s32);this.operations.push({callback:function(){}});return await this.generateAlert(this.curLang.s30,options)}async handleOperations(index){await this.operations[index].callback()}cleanCache(){this.log(this.curLang.s34);let filePath=this.local.joinPath(this.local.documentsDirectory(),this.dataFile);if(this.local.fileExists(filePath)){this.local.remove(filePath)}filePath=this.bgImgPath;if(this.local.fileExists(filePath)){this.local.remove(filePath)}this.log(this.curLang.s35)}formatTimeDuring(total,lang="zh",n=0){total=Number(total);let zhUnitArr=["毫秒","秒","分钟","小时","天","月","年"];let enUnitArr=["ms","s","min","h","d","m","y"];let scaleArr=[1e3,60,60,24,30,12,100];let len=total;if(len>scaleArr[n]){len=total/scaleArr[n];return this.formatTimeDuring(len,lang,++n)}else{let unit=zhUnitArr[n];if(lang==="en"){unit=enUnitArr[n]}return len.toFixed(2)+""+unit}}fileLengthFormat(total,unit="",toByte=false){total=Number(total);var unitArr=["","KB","MB","GB","TB","PB","EB","ZB"];var n=0;try{n=unitArr.indexOf(unit)}catch(e){throw e}if(toByte){if(n==0){return total}return this.fileLengthFormat(total*1024,unitArr[--n],true)}var len=total;if(len>1e3){len=total/1024;return this.fileLengthFormat(len,unitArr[++n])}else{if(n==0){return len.toFixed(2)}return len.toFixed(2)+" "+unitArr[n]}}}(scriptName,scriptId,options)}
--------------------------------------------------------------------------------
/Scriptable/example/ScriptableToolKitDemo.js:
--------------------------------------------------------------------------------
1 | // Variables used by Scriptable.
2 | // These must be at the very top of the file. Do not edit.
3 | // icon-color: yellow; icon-glyph: magic;
4 | const scriptId = 'ScriptableToolKitDemo'
5 | const scriptName = '工具包使用示例'
6 | var options = {}
7 | options[`lkIsSaveLog${scriptId}`] = true
8 | options[`lkRunLimitNum${scriptId}`] = 300000
9 | const $ = new ScriptableToolKit(scriptName, scriptId, options)
10 |
11 | let widget = new ListWidget()
12 | widget.backgroundImage = $.getWidgetBg()
13 |
14 | if (config.runsInWidget) {
15 | if (await $.checkLimit()) {
16 | $.execFail()
17 | $.saveLog()
18 | return false;
19 | }
20 | main()
21 | } else {
22 | const customEnter = [
23 | {
24 | name:{
25 | zh:"操作1",
26 | en:"operation1"
27 | },
28 | callback: callback1
29 | },
30 | {
31 | name:{
32 | zh:"操作2",
33 | en:"operation2"
34 | },
35 | callback: callback2
36 | }
37 | ]
38 | let enter = await $.widgetEnter(customEnter)
39 | await $.handleOperations(enter)
40 | }
41 |
42 | function callback1(){
43 | $.log("操作1")
44 | }
45 |
46 | function callback2(){
47 | $.log("操作2")
48 | }
49 |
50 | async function main() {
51 | // Your code here
52 | $.log('send request to baidu')
53 | const url = {
54 | url: 'http://www.baidu.com'
55 | }
56 | $.post(url, (response, data) => {
57 | $.log(JSON.stringify(response))
58 | $.log(data)
59 | })
60 |
61 | // persistence your data
62 | // get all data content
63 | $.log('get data file content')
64 | $.log(await $.getDataFile())
65 |
66 | // get value of key from icloud container('local' or 'icloud'). If there is no value, return 'defaultValue' you passed in
67 | $.log('get value of key from icloud')
68 | $.log(await $.getVal('key', 'icloud', 'defaultValue'))
69 |
70 | // set value for key to target container('local' or 'icloud')
71 | $.log('set value for key')
72 | $.setVal('key', 'value', 'icloud')
73 | $.setVal('key1', 'value1', 'icloud')
74 | $.log(await $.getVal('key', 'icloud', 'defaultValue'))
75 | $.log(await $.getDataFile())
76 |
77 | $.log('save log')
78 | $.saveLog()
79 | widget.presentSmall()
80 | Script.setWidget(widget)
81 | Script.complete()
82 | }
83 |
84 | //ScriptableToolKit-start
85 | function ScriptableToolKit(scriptName,scriptId,options){return new class{constructor(scriptName,scriptId,options){this.isLimited=false;this.checkLimit();this.local=FileManager.local();this.icloud=FileManager.iCloud();this.curDateCache=this.local.joinPath(this.local.documentsDirectory(),"curDateCache");this.options=options;this.tgEscapeCharMapping={"&":"&"};this.userAgent=`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15`;this.prefix=`lk`;this.name=scriptName;this.id=scriptId;this.data=null;this.dataFile=`${this.prefix}${this.id}.json`;this.bgImgPath=`${this.prefix}${this.id}Bg.jpg`;this.bgImgPath=this.local.joinPath(this.local.documentsDirectory(),this.bgImgPath);this.lang=Device.language();this.msg={zh:{s0:"在开始之前,先进入主屏幕,进入图标排列模式。滑到最右边的空白页,并进行截图。",s1:"看起来你选择的图片不是iPhone的截图,或者你的iPhone不支持。请换一张图片再试一次。",s2:"你想创建什么尺寸的widget?",s3:"你想把widget放在哪里?",s4:" (请注意,您的设备只支持两行小部件,所以中间和底部的选项是一样的)。",s5:"widget的背景图已裁切完成,想在Scriptable内部使用还是导出到相册?",s6:"已经截图,继续",s7:"退出去截图",s8:"小",s9:"中",s10:"大",s11:"顶部左边",s12:"顶部右边",s13:"中间左边",s14:"中间右边",s15:"底部左边",s16:"底部右边",s17:"顶部",s18:"中间",s19:"底部",s20:"在Scriptable内部使用",s21:"导出到相册",s22:"填写遮罩层颜色。(格式:#000000)",s23:"颜色(格式:#000000)",s24:"填写遮罩层不透明度(0-1之间)",s25:"0-1之间",s26:"确定",s27:"取消",s28:"预览widget",s29:"设置widget背景",s30:"入口",s31:"你用的是哪个型号?",s32:"退出",s33:"清除缓存",s34:"开始清除缓存",s35:"清除缓存完成"},en:{s0:"Before you start, go to your home screen and enter wiggle mode. Scroll to the empty page on the far right and take a screenshot.",s1:"It looks like you selected an image that isn't an iPhone screenshot, or your iPhone is not supported. Try again with a different image.",s2:"What size of widget are you creating?",s3:"What position will it be in?",s4:" (Note that your device only supports two rows of widgets, so the middle and bottom options are the same.)",s5:"Your widget background is ready. Would you like to use it in a Scriptable widget or export the image?",s6:"Continue",s7:"Exit to Take Screenshot",s8:"Small",s9:"Medium",s10:"Large",s11:"Top left",s12:"Top right",s13:"Middle left",s14:"Middle right",s15:"Bottom left",s16:"Bottom right",s17:"Top",s18:"Middle",s19:"Bottom",s20:"Use in Scriptable",s21:"Export to Photos",s22:"Fill in the mask layer color. (Format: #000000)",s23:"Color.(Format: #000000)",s24:"Fill in the mask layer opacity (between 0-1)",s25:"between 0-1",s26:"Confirm",s27:"Cancel",s28:"Preview widget",s29:"Setting widget background",s30:"ENTER",s31:"What type of iPhone do you have?",s32:"Exit",s33:"Clean cache",s34:"Clean cache started",s35:"Clean cache finished"}};this.curLang=this.msg[this.lang]||this.msg.en;this.isSaveLog=this.getResultByKey(`${this.prefix}IsSaveLog${this.id}`,false);this.isEnableLog=this.getResultByKey(`${this.prefix}IsEnableLog${this.id}`,true);this.logDir=this.icloud.documentsDirectory()+"/lklogs/"+this.id;this.logSeparator="\n██";this.now=new Date;this.execStatus=true;this.notifyInfo=[];this.operations=[]}async checkLimit(){const lastRunningTime=await this.getVal(`${this.prefix}LastRunningTime${this.id}`,"local",0);const runLimitNum=this.getResultByKey(`${this.prefix}RunLimitNum${this.id}`,3e5);this.log(`上次运行时间:${lastRunningTime},运行频率限制:${runLimitNum}`);if(lastRunningTime>=0){if(this.now.getTime()-lastRunningTime<=runLimitNum){this.appendNotifyInfo("限制运行");this.isLimited=true}else{await this.setVal(`${this.prefix}LastRunningTime${this.id}`,this.now.getTime(),"local")}}return this.isLimited}getResultByKey(key,defaultValue){if(!this.options){return defaultValue}const val=this.options[key];if(this.isEmpty(val)){return defaultValue}else{return val}}appendNotifyInfo(info,type){if(type==1){this.notifyInfo=info}else{this.notifyInfo.push(`${this.logSeparator}${this.formatDate(new Date,"yyyy-MM-dd HH:mm:ss.S")}█${info}`)}}saveLog(){if(this.isSaveLog){let message;if(Array.isArray(this.notifyInfo)){message=this.notifyInfo.join("")}else{message=this.notifyInfo}if(!this.icloud.isDirectory(this.logDir)){this.icloud.createDirectory(this.logDir,true)}this.icloud.writeString(`${this.logDir}/${this.formatDate(this.now,"yyyyMMddHHmmss")}.log`,message)}}prependNotifyInfo(info){this.notifyInfo.splice(0,0,info)}execFail(){this.execStatus=false}sleep(time){return new Promise(resolve=>setTimeout(resolve,time))}log(message){if(this.isEnableLog)console.log(`${this.logSeparator}${JSON.stringify(message)}`);this.appendNotifyInfo(message)}logErr(message){this.execStatus=false;if(this.isEnableLog){console.warn(`${this.logSeparator}${this.name}执行异常:`);console.warn(message);console.warn(`\n${message.message}`)}}getContainer(key){return key=="local"?this.local:this.icloud}async getVal(key,container,defaultValue){let containerInstance=this.getContainer(container);let data="";try{let realDataFile=containerInstance.joinPath(containerInstance.documentsDirectory(),this.dataFile);if(!containerInstance.fileExists(realDataFile)){await this.setVal(key,defaultValue,container);return defaultValue}data=await containerInstance.readString(realDataFile);data=JSON.parse(data)}catch(e){throw e}if(data.hasOwnProperty(key)){return data[key]}else{await this.setVal(key,defaultValue,container);return defaultValue}}async getDataFile(container){let containerInstance=this.getContainer(container);let data="";try{let realDataFile=containerInstance.joinPath(containerInstance.documentsDirectory(),this.dataFile);if(!containerInstance.fileExists(realDataFile)){return Promise.resolve("")}data=await containerInstance.readString(realDataFile)}catch(e){throw e}return Promise.resolve(data)}async saveImage(fileName,image,container){let containerInstance=this.getContainer(container);let imagePath=containerInstance.joinPath(containerInstance.documentsDirectory(),`${this.prefix}${this.id}/${fileName}`);let imageDir=imagePath.substring(0,imagePath.lastIndexOf("/")+1);if(!containerInstance.isDirectory(imageDir)){containerInstance.createDirectory(imageDir,true)}containerInstance.writeImage(imagePath,image)}async getImage(fileName,container){let containerInstance=this.getContainer(container);let imagePath=containerInstance.joinPath(containerInstance.documentsDirectory(),`${this.prefix}${this.id}/${fileName}`);if(!containerInstance.fileExists(imagePath)){this.logErr(`file not exist: ${imagePath}`);return false}return await containerInstance.readImage(imagePath)}async setVal(key,val,container){let containerInstance=this.getContainer(container);let data;let realDataFile=containerInstance.joinPath(containerInstance.documentsDirectory(),this.dataFile);try{if(!containerInstance.fileExists(realDataFile)){data={}}else{data=await containerInstance.readString(realDataFile);data=JSON.parse(data)}}catch(e){data={}}data[key]=val;await containerInstance.writeString(realDataFile,JSON.stringify(data))}async get(options,callback=(()=>{})){let request=new Request("");request.url=options.url;request.method="GET";request.headers=options.headers;try{const result=await request.loadString();callback(request.response,result);return result}catch(e){this.logErr(e);callback(undefined,undefined)}}async post(options,callback=(()=>{})){let request=new Request("");request.url=options.url;request.body=options.body;request.method="POST";request.headers=options.headers;request.timeout=5e3;try{const result=await request.loadString();callback(request.response,result);return result}catch(e){this.logErr(e);callback(undefined,undefined)}}async loadScript({scriptName:scriptName,url:url}){this.log(`获取脚本【${scriptName}】`);const content=await this.get({url:url});this.icloud.writeString(`${this.icloud.documentsDirectory()}/${scriptName}.js`,content);this.log(`获取脚本【${scriptName}】完成🎉`)}require({scriptName:scriptName,url:url="",reload:reload=false}){if(this.icloud.fileExists(this.icloud.joinPath(this.icloud.documentsDirectory(),`${scriptName}.js`))&&!reload){this.log(`引用脚本【${scriptName}】`);return importModule(scriptName)}else{this.loadScript({scriptName:scriptName,url:url});this.log(`引用脚本【${scriptName}】`);return importModule(scriptName)}}async generateInputAlert(message,field,defaultValue){let result=[];let alert=new Alert;alert.message=message;alert.addTextField(field,defaultValue);alert.addCancelAction(this.curLang.s27);alert.addAction(this.curLang.s26);result[0]=await alert.presentAlert();result[1]=alert.textFieldValue(0);return result}async generateAlert(message,options){let alert=new Alert;alert.message=message;for(const option of options){alert.addAction(option)}return await alert.presentAlert()}isEmpty(obj){return typeof obj=="undefined"||obj==null||obj==""||obj=="null"}isWorkingDays(now,workingDaysFlag="curlybraces",holidayFlag="gamecontroller"){return new Promise(async(resolve,reject)=>{let sp="≈";const d=this.formatDate(now,"yyyy-MM-dd");let resultStr=0;try{let curDate=await this.getVal("curDateCache","local","fff");let curDateErrorTime=await this.getVal("curDateCacheErrorTime","local",this.now.getTime());let isPreError=!this.isEmpty(curDateErrorTime)&&Number(curDateErrorTime)+5*60*1e3{if(data.indexOf("<")==0){resultStr="❌"}else{resultStr=JSON.parse(data);if(resultStr.code==-1){resultStr="❌"}else{resultStr=resultStr.type.type}}})}}catch(e){resultStr="❌";this.logErr(e)}finally{await this.setVal("curDateCache",`${d}${sp}${resultStr}`,"local");if(resultStr=="❌"){resolve(resultStr);this.log("写入运行错误时间,5分钟后重新请求!");this.setVal("curDateCache","","local");this.setVal("curDateCacheErrorTime",`${this.now.getTime()}`,"local")}else{this.setVal("curDateCacheErrorTime","","local");this.setVal("curDateCache",`${d}${sp}${resultStr}`,"local");resolve(resultStr==0||resultStr==3?workingDaysFlag:holidayFlag)}}})}randomString(len){len=len||32;var $chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";var maxPos=$chars.length;var pwd="";for(let i=0;i{return item.name[this.lang]});let customEnterCallback=customEnter.map((item,index)=>{return item.callback});if(isReset){options=customEnterNames}else{this.operations.push({callback:main});this.operations.push({callback:function(){$.widgetCutBg()}});this.operations.push({callback:function(){$.cleanCache()}});options=options.concat(customEnterNames)}customEnterCallback.forEach(callback=>{this.operations.push({callback:callback})})}options.push(this.curLang.s32);this.operations.push({callback:function(){}});return await this.generateAlert(this.curLang.s30,options)}async handleOperations(index){await this.operations[index].callback()}cleanCache(){this.log(this.curLang.s34);let filePath=this.local.joinPath(this.local.documentsDirectory(),this.dataFile);if(this.local.fileExists(filePath)){this.local.remove(filePath)}filePath=this.bgImgPath;if(this.local.fileExists(filePath)){this.local.remove(filePath)}this.log(this.curLang.s35)}formatTimeDuring(total,lang="zh",n=0){total=Number(total);let zhUnitArr=["毫秒","秒","分钟","小时","天","月","年"];let enUnitArr=["ms","s","min","h","d","m","y"];let scaleArr=[1e3,60,60,24,30,12,100];let len=total;if(len>scaleArr[n]){len=total/scaleArr[n];return this.formatTimeDuring(len,lang,++n)}else{let unit=zhUnitArr[n];if(lang==="en"){unit=enUnitArr[n]}return len.toFixed(2)+""+unit}}fileLengthFormat(total,unit="",toByte=false){total=Number(total);var unitArr=["","KB","MB","GB","TB","PB","EB","ZB"];var n=0;try{n=unitArr.indexOf(unit)}catch(e){throw e}if(toByte){if(n==0){return total}return this.fileLengthFormat(total*1024,unitArr[--n],true)}var len=total;if(len>1e3){len=total/1024;return this.fileLengthFormat(len,unitArr[++n])}else{if(n==0){return len.toFixed(2)}return len.toFixed(2)+" "+unitArr[n]}}}(scriptName,scriptId,options)}
86 | //ScriptableToolKit-end
--------------------------------------------------------------------------------
/Scriptable/ugstoolkit:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | targetPath="/Users/lowking/Desktop/Scripts"
3 |
4 | # 执行min
5 | uglifyjs $targetPath/Scriptable/ScriptableToolKit.js -o $targetPath/Scriptable/ScriptableToolKit.min.js
6 |
7 | # 复制min文件内容
8 | pbcopy < $targetPath/Scriptable/ScriptableToolKit.min.js
9 |
10 | # 从剪辑版复制内容
11 | pasteStr=$(pbpaste -Prefer text)
12 |
13 | # 替换到所有脚本//ScriptableToolKit-start和//ScriptableToolKit-end之间的内容
14 | echo "批量替换.js中ScriptableToolKit开始"
15 | count=0
16 | while IFS= read -r -d '' i
17 | do
18 | lineno=$(grep -n "//ScriptableToolKit-start" "$i")
19 | if [ -n "$lineno" ]; then
20 | array=()
21 | IFS=":" read -r -a array <<< "$lineno"
22 | lineno=$(( array[0] + 1 ))
23 | if [ $lineno -ge 1 ]; then
24 | sed -i '' $lineno"G" "$i"
25 | sed -i '' $lineno"d" "$i"
26 | sed -i '' "$(( lineno - 1)) r $targetPath/Scriptable/ScriptableToolKit.min.js" "$i"
27 | printf "%-20s %s\n" "替换行:$lineno" "$i"
28 | count=$(( count + 1))
29 | fi
30 | fi
31 | done < <(find $targetPath -name '*.js' -print0 ! -path '*node_modules')
32 | echo "批量替换.js中ScriptableToolKit完成。共替换"$count"个js"
33 |
34 |
--------------------------------------------------------------------------------
/Scriptable/widgetCutBg.js:
--------------------------------------------------------------------------------
1 | // https://gist.githubusercontent.com/mzeryck/3a97ccd1e059b3afa3c6666d27a496c9/raw/bbcac348d540e452228bd85aa80a5b45bb023a65/mz_invisible_widget.js
2 | // 这是原作者gist地址,本人就汉化,只为引用到自己修改的Scriptable中
3 | // Variables used by Scriptable.
4 | // These must be at the very top of the file. Do not edit.
5 | // icon-color: deep-purple; icon-glyph: image;
6 |
7 | // This widget was created by Max Zeryck @mzeryck
8 |
9 | // Widgets are unique based on the name of the script.
10 | const filename = Script.name() + ".jpg"
11 | const files = FileManager.local()
12 | const path = files.joinPath(files.documentsDirectory(), filename)
13 | // zh_CN, en
14 | const lang = "zh_CN"
15 | const msg = {
16 | "zh_CN": [
17 | "在开始之前,先进入主屏幕,进入图标排列模式。滑到最右边的空白页,并进行截图。",
18 | "看起来你选择的图片不是iPhone的截图,或者你的iPhone不支持。请换一张图片再试一次。",
19 | "你想创建什么尺寸的widget?",
20 | "你想把widget放在哪里?",
21 | " (请注意,您的设备只支持两行小部件,所以中间和底部的选项是一样的)。",
22 | "widget的背景图已裁切完成,想在Scriptable内部使用还是导出到相册?",
23 | "已经截图,继续",
24 | "退出去截图",
25 | "小","中","大",
26 | "顶部左边","顶部右边","中间左边","中间右边","底部左边","底部右边",
27 | "顶部","中间","底部",
28 | "在Scriptable内部使用","导出到相册"
29 | ],
30 | "en": [
31 | "Before you start, go to your home screen and enter wiggle mode. Scroll to the empty page on the far right and take a screenshot.",
32 | "It looks like you selected an image that isn't an iPhone screenshot, or your iPhone is not supported. Try again with a different image.",
33 | "What size of widget are you creating?",
34 | "What position will it be in?",
35 | " (Note that your device only supports two rows of widgets, so the middle and bottom options are the same.)",
36 | "Your widget background is ready. Would you like to use it in a Scriptable widget or export the image?",
37 | "Continue",
38 | "Exit to Take Screenshot",
39 | "Small","Medium","Large",
40 | "Top left","Top right","Middle left","Middle right","Bottom left","Bottom right",
41 | "Top","Middle","Bottom",
42 | "Use in Scriptable","Export to Photos"
43 | ]
44 | }
45 |
46 | if (config.runsInWidget) {
47 | let widget = new ListWidget()
48 | widget.backgroundImage = files.readImage(path)
49 |
50 | // Your code here
51 |
52 | Script.setWidget(widget)
53 | Script.complete()
54 | } else {
55 |
56 | // Determine if user has taken the screenshot.
57 | var message
58 | var curLang = msg[lang]
59 | message = curLang[0]
60 | let exitOptions = [curLang[6],curLang[7]]
61 | let shouldExit = await generateAlert(message,exitOptions)
62 | if (shouldExit) return
63 |
64 | // Get screenshot and determine phone size.
65 | let img = await Photos.fromLibrary()
66 | let height = img.size.height
67 | let phone = phoneSizes()[height]
68 | if (!phone) {
69 | message = curLang[1]
70 | await generateAlert(message,["OK"])
71 | return
72 | }
73 |
74 | // Prompt for widget size and position.
75 | message = curLang[2]
76 | let sizes = [curLang[8], curLang[9], curLang[10]]
77 | let size = await generateAlert(message,sizes)
78 |
79 | message = curLang[3]
80 | message += (height == 1136 ? curLang[4] : "")
81 |
82 | // Determine image crop based on phone size.
83 | let crop = { w: "", h: "", x: "", y: "" }
84 | if (size == 0) {
85 | crop.w = phone.small
86 | crop.h = phone.small
87 | let positions = ["Top left","Top right","Middle left","Middle right","Bottom left","Bottom right"]
88 | let positionsString = [curLang[11],curLang[12],curLang[13],curLang[14],curLang[15],curLang[16]]
89 | let position = await generateAlert(message,positionsString)
90 |
91 | // Convert the two words into two keys for the phone size dictionary.
92 | let keys = positions[position].toLowerCase().split(' ')
93 | crop.y = phone[keys[0]]
94 | crop.x = phone[keys[1]]
95 |
96 | } else if (size == 1) {
97 | crop.w = phone.medium
98 | crop.h = phone.small
99 |
100 | // Medium and large widgets have a fixed x-value.
101 | crop.x = phone.left
102 | let positions = ["Top","Middle","Bottom"]
103 | let positionsString = [curLang[17],curLang[18],curLang[19]]
104 | let position = await generateAlert(message,positionsString)
105 | let key = positions[position].toLowerCase()
106 | crop.y = phone[key]
107 |
108 | } else if(size == 2) {
109 | crop.w = phone.medium
110 | crop.h = phone.large
111 | crop.x = phone.left
112 | let positions = ["Top","Bottom"]
113 | let positionsString = [curLang[17],curLang[19]]
114 | let position = await generateAlert(message,positionsString)
115 |
116 | // Large widgets at the bottom have the "middle" y-value.
117 | crop.y = position ? phone.middle : phone.top
118 | }
119 |
120 | // Crop image and finalize the widget.
121 | let imgCrop = cropImage(img, new Rect(crop.x,crop.y,crop.w,crop.h))
122 |
123 | message = curLang[5]
124 | const exportPhotoOptions = [curLang[20],curLang[21]]
125 | const exportPhoto = await generateAlert(message,exportPhotoOptions)
126 |
127 | if (exportPhoto) {
128 | Photos.save(imgCrop)
129 | } else {
130 | files.writeImage(path,imgCrop)
131 | }
132 |
133 | Script.complete()
134 | }
135 |
136 | // Generate an alert with the provided array of options.
137 | async function generateAlert(message,options) {
138 |
139 | let alert = new Alert()
140 | alert.message = message
141 |
142 | for (const option of options) {
143 | alert.addAction(option)
144 | }
145 |
146 | let response = await alert.presentAlert()
147 | return response
148 | }
149 |
150 | // Crop an image into the specified rect.
151 | function cropImage(img,rect) {
152 |
153 | let draw = new DrawContext()
154 | draw.size = new Size(rect.width, rect.height)
155 |
156 | draw.drawImageAtPoint(img,new Point(-rect.x, -rect.y))
157 | return draw.getImage()
158 | }
159 |
160 | // Pixel sizes and positions for widgets on all supported phones.
161 | function phoneSizes() {
162 | let phones = {
163 | "2688": {
164 | "small": 507,
165 | "medium": 1080,
166 | "large": 1137,
167 | "left": 81,
168 | "right": 654,
169 | "top": 228,
170 | "middle": 858,
171 | "bottom": 1488
172 | },
173 |
174 | "1792": {
175 | "small": 338,
176 | "medium": 720,
177 | "large": 758,
178 | "left": 54,
179 | "right": 436,
180 | "top": 160,
181 | "middle": 580,
182 | "bottom": 1000
183 | },
184 |
185 | "2436": {
186 | "small": 465,
187 | "medium": 987,
188 | "large": 1035,
189 | "left": 69,
190 | "right": 591,
191 | "top": 213,
192 | "middle": 783,
193 | "bottom": 1353
194 | },
195 |
196 | "2532": {
197 | "small": 474,
198 | "medium": 1014,
199 | "large": 1062,
200 | "left": 78,
201 | "right": 618,
202 | "top": 231,
203 | "middle": 819,
204 | "bottom": 1407
205 | },
206 |
207 | "2208": {
208 | "small": 471,
209 | "medium": 1044,
210 | "large": 1071,
211 | "left": 99,
212 | "right": 672,
213 | "top": 114,
214 | "middle": 696,
215 | "bottom": 1278
216 | },
217 |
218 | "1334": {
219 | "small": 296,
220 | "medium": 642,
221 | "large": 648,
222 | "left": 54,
223 | "right": 400,
224 | "top": 60,
225 | "middle": 412,
226 | "bottom": 764
227 | },
228 |
229 | "1136": {
230 | "small": 282,
231 | "medium": 584,
232 | "large": 622,
233 | "left": 30,
234 | "right": 332,
235 | "top": 59,
236 | "middle": 399,
237 | "bottom": 399
238 | },
239 | "1624": {
240 | "small": 310,
241 | "medium": 658,
242 | "large": 690,
243 | "left": 46,
244 | "right": 394,
245 | "top": 142,
246 | "middle": 522,
247 | "bottom": 902
248 | }
249 | }
250 | return phones
251 | }
252 |
--------------------------------------------------------------------------------
/Scripts.sgmodule:
--------------------------------------------------------------------------------
1 | #!name=Scripts by lowking. Self-use
2 | #!desc=该模块自用,脚本合集
3 | #!category=Self
4 | #!arguments=repoPrefix,repoSuffix
5 | #!arguments-desc=repoPrefix:个人代码托管url前缀\nrepoSuffix:个人代码托管url后缀
6 |
7 | [URL Rewrite]
8 | (http[s]?:\/\/rule.l\/)(?[^\/]+[\/])(?[^\/]+[\/])(?[\w\W]+[\/])(?.+) {{{repoPrefix}}}$2$3raw/$4$5{{{repoSuffix}}} 302
9 |
10 | [Rule]
11 | # > 京东 去启动广告,必须是REJECT-TINYGIF, 否则比价会失效
12 | URL-REGEX,^https?:\/\/api\.m\.jd\.com\/client\.action\?functionId=start$,REJECT-TINYGIF
13 |
14 | # 哔哩哔哩 去广告
15 | URL-REGEX,https://app.bilibili.com/x/v2/(splash|search/(defaultword|square)),REJECT
16 | URL-REGEX,https://api.bilibili.com/x/v2/dm/ad,REJECT
17 |
18 |
19 | [Script]
20 | # 获取当前经纬度
21 | # location = type=http-request, pattern=https://weather-data.apple.com, script-path=https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tools/Location/locate.js, require-body=false
22 |
23 | # 彩云获取经纬度,虽然和上面的一样,但是数据结构不一样
24 | 彩云位置 = type=http-request, pattern=https://weather-data.apple.com, script-path=https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tasks/caiyun.js, require-body=false
25 |
26 | # > bilbii 换区、评分
27 | 哔哩换区 = type=http-response,pattern=^https:\/\/ap(p|i)\.bili(bili|api)\.(com|net)\/(pgc\/view\/v\d\/app\/season|x\/offline\/version)\?,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Bili_Auto_Regions.js
28 | 哔哩搜索 = type=http-request,pattern=^https:\/\/ap(p|i)\.bili(bili|api)\.(com|net)\/x\/v\d\/search(\/type)?\?.+?%20(%E6%B8%AF|%E5%8F%B0|%E4%B8%AD)&,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Bili_Auto_Regions.js
29 |
30 | 斗鱼画质过滤 = requires-body=1,type=http-response,pattern=https:\/\/playclient\.douyucdn\.cn\/lapi\/live\/appGetPlayer\/stream,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/douyu/streamQuality.js
31 |
32 | [MITM]
33 | hostname = %APPEND% playclient.douyucdn.cn, ap?.bilibili.com, ap?.biliapi.net, api.m.jd.com, trade-acs.m.taobao.com, weather-data.apple.com
--------------------------------------------------------------------------------
/Snap.list:
--------------------------------------------------------------------------------
1 | DOMAIN-SUFFIX,nvprod.snapgametech.com
2 | DOMAIN-SUFFIX,braze.com
3 | DOMAIN-SUFFIX,byteoversea.com
4 | DOMAIN-SUFFIX,isnssdk.com
5 | DOMAIN-SUFFIX,bytegsdk.com
6 | DOMAIN-SUFFIX,client-api.unity3dusercontent.com
7 | DOMAIN-SUFFIX,backtrace.io
--------------------------------------------------------------------------------
/Ssid.sgmodule:
--------------------------------------------------------------------------------
1 | #!name=Ssid by lowking. Self-use
2 | #!desc=该模块自用,Wi-Fi助手
3 | #!category=Self
4 |
5 | [Script]
6 | SSID助手 = debug=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/util/Ssid.js,type=event,event-name=network-changed,control-api=true
--------------------------------------------------------------------------------
/Tasks-removed.sgmodule:
--------------------------------------------------------------------------------
1 | #!name=Tasks-removed by lowking. Self-use
2 | #!desc=无需安装该模块,用于记录已移除的任务
3 |
4 | [Script]
5 | hifini签到 = type=cron,cronexp="55 59 23 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/hifini/hifiniSign.js,script-update-interval=0
6 |
7 | 10000 = type=cron,cronexp="0 10 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/10000/10000.js,script-update-interval=0
8 |
9 | 云闪付积分 = type=cron,cronexp="0 10 0 * * ?",wake-system=1,timeout=120,script-path=ysf.js,script-update-interval=0
10 |
11 | eu.org审核 = type=cron,cronexp="10 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/others/eu.org.js,script-update-interval=0
12 |
13 | 京东多合一签到 = type=cron,cronexp="20 1 0,20 * * ?",wake-system=1,timeout=120,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js,script-update-interval=0,max-size=-1
14 |
15 | 京东金融领豆 = type=cron,cronexp="20 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/dompling/Script/master/jd/jd_jr_sign.js,script-update-interval=0
16 |
17 | 顺丰签到 = type=cron,cronexp="30 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/sfexpress/sfexpress.js,script-update-interval=0
18 |
19 | 爱奇艺 = type=cron,cronexp="30 2 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/iQIYI-DailyBonus/iQIYI.js,script-update-interval=0
20 |
21 | 取关京东店铺和商品 = type=cron,cronexp="20 3 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lxk0301/jd_scripts/master/jd_unsubscribe.js,script-update-interval=0
22 |
23 | 微博超话 = type=cron,cronexp="0 0 0 * * ?",wake-system=1,timeout=30,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/weibo/weiboST.js,script-update-interval=0
24 |
25 | 腾讯视频 = type=cron,cronexp="0 4 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/videoqq/videoqq.js,script-update-interval=0
26 |
27 | 斗鱼鱼吧 = type=cron,cronexp="0 2 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/douyu/yubaSign.js,script-update-interval=0
28 |
29 | 芒果TV = type=cron,cronexp="0 3 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/mgtv/mgtv.js,script-update-interval=0
30 |
31 | 滴滴出行 = type=cron,cronexp="10 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/zZPiglet/Task/master/DiDi/DiDi_new.js,script-update-interval=0
32 |
33 | 智行火车票 = type=cron,cronexp="50 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/zxhc/zxhc.js,script-update-interval=0
34 |
35 | 京东保价 = type=cron,cronexp="20 3 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/id77/QuantumultX/master/task/jdGuaranteedPrice.js,script-update-interval=0
36 |
37 | 哔哩哔哩 = type=cron,cronexp="30 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/bilibili/bilibili.js,script-update-interval=0
38 | 哔哩哔哩硬币 = type=cron,cronexp="40 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/bilibili/bilibili.silver2coin.js,script-update-interval=0
39 |
40 | ##############其他时间特殊的任务##############
41 | 朴朴签到 = type=cron,cronexp="57 59 6,8,12,15,18,20 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/pupu/pupuCheckIn.js,script-update-interval=0
42 |
43 | 哔哩哔哩大会员特权领取 = type=cron,cronexp="0 1 0 10 * ?",script-path=https://raw.githubusercontent.com/lowking/Scripts/master/bilibili/privilegeReceive.js,script-update-interval=0
44 |
45 | epic = type=cron,cronexp="0 0 10 * * 6",wake-system=1,control-api=1,script-path=https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tasks/epic.js,script-update-interval=0
46 |
47 | qq会员签到 = type=cron,cronexp="0 3 12 * * ?",wake-system=1,timeout=30,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/QQVip/qqVipCheckIn.js,script-update-interval=0
48 |
49 | CMY机场签到 = type=cron,cronexp="5 59 23 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/personal/cmy/cmy.js,script-update-interval=0
50 |
51 | 彩云天气 = type=cron,cronexp="0 6-20 * * *",wake-system=1,control-api=1,script-path=https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tasks/caiyun.js,script-update-interval=0
52 |
53 | # bing积分 = type=cron,cronexp="30 */30 20-23,0-11 * * ?",wake-system=1,timeout=30,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/bing/bingPoint.js,script-update-interval=0
54 |
55 | 同步京东账号 = type=cron,cronexp="0 1 5,11,17,23 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/jd/ql_sync_box.js,script-update-interval=0
56 | 登录辅助初始化 = type=cron,cronexp="0 5 5,11,17,23 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/jd/jd_cookie_search.js,script-update-interval=0
57 |
58 | bing积分1 = type=cron,cronexp="0 0 10 * * ?",wake-system=1,timeout=880,script-path=bingPoint.js,script-update-interval=0
59 | 会话切换1 = type=cron,cronexp="0 50 10 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/box/switcher/box.switcher.js,script-update-interval=0
60 | bing积分2 = type=cron,cronexp="0 0 23 * * ?",wake-system=1,timeout=880,script-path=bingPoint.js,script-update-interval=0
61 | 会话切换2 = type=cron,cronexp="0 50 23 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/box/switcher/box.switcher.js,script-update-interval=0
62 |
63 | ##############需要BoxJs多会话切换的##############
64 | QQ萌宠 = type=cron,cronexp="30 10 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/QQPet/lkQQPet.js,script-update-interval=0
65 |
66 | 会话切换1 = type=cron,cronexp="30 11 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/box/switcher/box.switcher.js,script-update-interval=0
67 |
68 | QQ萌宠 = type=cron,cronexp="35 11 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/QQPet/lkQQPet.js,script-update-interval=0
69 |
70 |
71 | ##############常开获取cookie##############
72 | 哔哩哔哩番剧监控 = type=cron,cronexp="*/29 6-23 * * *",wake-system=1,timeout=360,control-api=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/bilibili/bangumiMonitor.js,script-update-interval=0
73 |
74 | 哔哩哔哩大会员特权领取cookie = type=http-request,pattern=https:\/\/data.bilibili.com\/log\/mobile,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/bilibili/privilegeReceive.js,script-update-interval=0
75 |
76 | 微博超话-cookie = type=http-request,timeout=360,pattern=https:\/\/weibo\.com\/p\/aj\/general\/button\?ajwvr=6&api=http:\/\/i\.huati\.weibo\.com\/aj\/super\/checkin,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/weibo/weiboSTCookie.js
77 |
78 | 哔哩哔哩-cookie = script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/bilibili/bilibili.cookie.js,type=http-request,pattern=^https:\/\/(www|live)\.bilibili\.com\/?.?
79 |
80 | qq会员-cookie = type=http-request,pattern=https:\/\/proxy.vac.qq.com\/cgi-bin\/srfentry.fcgi,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/QQVip/qqVipCheckIn.js
81 |
82 | [MITM]
83 | hostname = %APPEND% data.bilibili.com, proxy.vac.qq.com, weibo.com
84 |
--------------------------------------------------------------------------------
/Tasks.sgmodule:
--------------------------------------------------------------------------------
1 | #!name=Tasks by lowking. Self-use
2 | #!desc=该模块自用,脚本签到合集
3 | #!category=Self
4 |
5 | [Script]
6 | 阿里云盘签到 = type=cron,cronexp="0 1 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/ali/aliYunPanCheckIn.js,script-update-interval=0
7 |
8 | 贴吧 = type=cron,cronexp="50 2 0 * * ?",wake-system=1,timeout=120,script-path=https://raw.githubusercontent.com/chavyleung/scripts/master/tieba/tieba.js,script-update-interval=0
9 |
10 | 索尼俱乐部 = type=cron,cronexp="10 3 0 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/sony/sonyClub.js,script-update-interval=0
11 |
12 | ##############其他时间特殊的任务##############
13 | Jump游戏价格监控 = type=cron,cronexp="0 30 17 * * ?",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/jump/jumpPrice.js,script-update-interval=0
14 |
15 | EPIC限免 = type=cron,cronexp="0 0 0 * * 6",wake-system=1,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/epic/freeGames.js
16 |
17 | 绝区零 = type=cron,cronexp="0 0 13 * * ?",wake-system=1,timeout=700,script-path=https://raw.githubusercontent.com/lowking/Scripts/master/mihoyo/zzz.js,script-update-interval=0
18 |
19 | ##############常开获取cookie##############
20 | [MITM]
21 | hostname = %APPEND% data.bilibili.com
22 |
--------------------------------------------------------------------------------
/boxjs-empty.bmp:
--------------------------------------------------------------------------------
1 | BM<