chore(scripts): 更新开发脚本路径
- 将 dev 脚本中的 xuequ 目录更正为 xiequ 目录 - 保持其他脚本配置不变
This commit is contained in:
82
xiequ/switch.js
Normal file
82
xiequ/switch.js
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* cron: 0 12 * * *
|
||||
*
|
||||
* 携趣白名单切换(多个携趣,多个IP,多个IP选中一个合适的携趣进行切换)
|
||||
*/
|
||||
const { Env } = require('../common');
|
||||
const $ = new Env('携趣小助手-白名单切换');
|
||||
const fetch = require('node-fetch');
|
||||
|
||||
/** 环境变量
|
||||
* XQ_ACCOUNTS: uid1;ukey1@备注 -》 多个则使用 & 分隔
|
||||
* XQ_WHITELIST: ip1 -》 多个则使用 & 分隔
|
||||
*/
|
||||
const accounts = process.env['XQ_ACCOUNTS'];
|
||||
const whitelist = process.env['XQ_WHITELIST'];
|
||||
|
||||
const apiTpl = {
|
||||
// 查看当前哪些 IP 在白名单中
|
||||
get: info => `http://op.xiequ.cn/IpWhiteList.aspx?uid=${info.uid}&ukey=${info.ukey}&act=get`,
|
||||
add: (info, ip) => `http://op.xiequ.cn/IpWhiteList.aspx?uid=${info.uid}&ukey=${info.ukey}&act=add&ip=${ip}`,
|
||||
delOne: (info, ip) => `http://op.xiequ.cn/IpWhiteList.aspx?uid=${info.uid}&ukey=${info.ukey}&act=del&ip=${ip}`,
|
||||
delAll: info => `http://op.xiequ.cn/IpWhiteList.aspx?uid=${info.uid}&ukey=${info.ukey}&act=del&ip=all`,
|
||||
// 获取 API 使用情况
|
||||
apiUse: info => `http://op.xiequ.cn/ApiUser.aspx?act=suitdt&uid=${info.uid}&ukey=${info.ukey}`
|
||||
}
|
||||
|
||||
!(async () => {
|
||||
if (!accounts || !whitelist) {
|
||||
$.log('请填写环境变量 XQ_ACCOUNTS & XQ_WHITELIST');
|
||||
return;
|
||||
}
|
||||
let tmp = [];
|
||||
let accs = accounts.split('&');
|
||||
let ips = whitelist.split('&');
|
||||
|
||||
// 解析参数 & 获取信息
|
||||
for (let content of accs) {
|
||||
let [acc, comment] = content.split('@');
|
||||
let [uid, ukey] = acc.split(';');
|
||||
if (!uid || !ukey) {
|
||||
$.log('请填写正确的环境变量 XQ_ACCOUNTS');
|
||||
return;
|
||||
}
|
||||
let info = { uid: uid.trim(), ukey: ukey.trim(), comment: comment || `[uid:${uid}]` };
|
||||
let item = {
|
||||
info: info,
|
||||
res: await (await fetch(apiTpl.get(info))).text(),
|
||||
count: await (async function () {
|
||||
let { data } = await (await fetch(apiTpl.apiUse(info))).json();
|
||||
return +data[0].num - +data[0].use;
|
||||
}())
|
||||
};
|
||||
tmp.push(item)
|
||||
$.log(`[INFO] ${item.info.comment} 剩余数: ${item.count}`);
|
||||
}
|
||||
|
||||
// 删除所有白名单
|
||||
$.log('\n--- 删除白名单 --- \n');
|
||||
for (let tmpElement of tmp) {
|
||||
if (tmpElement?.res) {
|
||||
await fetch(apiTpl.delAll(tmpElement.info));
|
||||
$.log(`删除 name: ${tmpElement.info.comment} 下的所有白名单 -> `, tmpElement.res);
|
||||
}
|
||||
}
|
||||
|
||||
await $.wait(520);
|
||||
// 选中一个数量最多的 API
|
||||
let change = tmp.sort((a, b) => b.count - a.count)[0];
|
||||
$.log('\n--- 切换白名单 --- \n');
|
||||
if (change) {
|
||||
for (const ip of ips) {
|
||||
await fetch(apiTpl.add(change.info, ip));
|
||||
$.log(`添加 name: ${change.info.comment} 白名单`);
|
||||
}
|
||||
}
|
||||
})()
|
||||
.catch((e) => {
|
||||
$.logErr(e);
|
||||
})
|
||||
.finally(() => {
|
||||
$.done();
|
||||
});
|
||||
Reference in New Issue
Block a user