125 lines
4.4 KiB
JavaScript
125 lines
4.4 KiB
JavaScript
// # Source: https://github.com/sudojia/AutoTaskScript/blob/script/src/web/sudojia_sspanel.js
|
||
// # Raw: https://raw.githubusercontent.com/sudojia/AutoTaskScript/script/src/web/sudojia_sspanel.js
|
||
// # Repo: sudojia/AutoTaskScript
|
||
// # Path: src/web/sudojia_sspanel.js
|
||
// # UploadedAt: 2025-04-28T19:26:13+08:00
|
||
// # SHA256: 8bd3374a2bddc90f5a4577c605285a665d61dde740ce6ae4eaad72eb42ea37a5
|
||
// # Category: web版/账密
|
||
// # Evidence: web/H5关键词 + username/password/login
|
||
//
|
||
|
||
/**
|
||
* 机场每日签到
|
||
*
|
||
* 如何鉴别是 SSPANEL 面板?
|
||
* 网站拉到最下面有 Powered by SSPANEL 就是 SSPANEL 面板框架的机场
|
||
* 格式要求:网站1,邮箱1:密码1&网站2,邮箱2:密码2
|
||
* export SITE_ACCOUNTS = 'https://paolu.com,abc@gmail.com:123456'
|
||
* 多账号用 & 或换行
|
||
*
|
||
* @author Telegram@sudojia
|
||
* @site https://blog.imzjw.cn
|
||
* @date 2021/9/25
|
||
* @lastModifyTime: 2024/09/16
|
||
*
|
||
* const $ = new Env('SSPANEL面板签到')
|
||
* cron: 35 9 * * *
|
||
*/
|
||
const initScript = require('../utils/initScript')
|
||
const {$, notify, sudojia, checkUpdate} = initScript('SSPANEL面板签到');
|
||
const {default: axios} = require("axios");
|
||
const accountList = process.env.SITE_ACCOUNTS ? process.env.SITE_ACCOUNTS.split(/[\n&]/) : [];
|
||
// 消息推送
|
||
let message = '';
|
||
// 请求头
|
||
const headers = {
|
||
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
|
||
"User-Agent": sudojia.getRandomUserAgent('PC'),
|
||
'Accept': 'application/json, text/javascript, */*; q=0.01',
|
||
'Accept-Encoding': 'gzip, deflate, br, zstd',
|
||
};
|
||
|
||
!(async () => {
|
||
await checkUpdate($.name, accountList);
|
||
console.log(`\n已随机分配 User-Agent\n\n${headers['user-agent'] || headers['User-Agent']}`);
|
||
// 校验格式
|
||
const isValidFormat = accountList.every(account => {
|
||
const parts = account.split(',');
|
||
if (parts.length !== 2) {
|
||
return false;
|
||
}
|
||
const [site, credentials] = parts;
|
||
const credParts = credentials.split(':');
|
||
return !(credParts.length !== 2 || !site || !credentials);
|
||
});
|
||
if (!isValidFormat) {
|
||
console.error('格式错误,请确保遵循要求格式:网站1,邮箱1:密码1&网站2,邮箱2:密码2');
|
||
process.exit(0);
|
||
}
|
||
for (let i = 0; i < accountList.length; i++) {
|
||
const index = i + 1;
|
||
const [rawUrl, emailPwd] = accountList[i].split(',');
|
||
const [email, pwd] = emailPwd.split(':');
|
||
const url = rawUrl.endsWith('/') ? rawUrl.slice(0, -1) : rawUrl;
|
||
console.log(`\n*****第[${index}]个${$.name}账号*****`);
|
||
console.log(`设定的机场网站是:${url}`);
|
||
await $.wait(sudojia.getRandomWait(300, 666));
|
||
message += `📣====${$.name}账号[${index}]====📣\n`;
|
||
await login(url, email, pwd);
|
||
}
|
||
if (message) {
|
||
await notify.sendNotify(`「${$.name}」`, `${message}`);
|
||
}
|
||
})().catch((e) => $.logErr(e)).finally(() => $.done());
|
||
|
||
/**
|
||
* 登录
|
||
*
|
||
* @returns {*}
|
||
*/
|
||
async function login(url, email, pwd) {
|
||
try {
|
||
const options = {
|
||
url: `${url}/auth/login`,
|
||
method: 'POST',
|
||
headers: headers,
|
||
data: `email=${email}&passwd=${pwd}&code=`
|
||
}
|
||
const response = await axios(options);
|
||
if (1 !== response.data.ret) {
|
||
return console.error(`登录失败:${response.data.msg}`);
|
||
}
|
||
const cookies = response.headers['set-cookie'];
|
||
headers.Cookie = cookies.join('; ');
|
||
console.log('登录成功~');
|
||
await $.wait(sudojia.getRandomWait(800, 1200));
|
||
await checkin(url);
|
||
} catch (e) {
|
||
console.error(`登录时发生异常:${e}`);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 签到
|
||
*
|
||
* @returns {*}
|
||
*/
|
||
async function checkin(url) {
|
||
try {
|
||
const data = await sudojia.sendRequest(`${url}/user/checkin`, 'post', headers, {});
|
||
if (1 !== data.ret) {
|
||
return console.error(`签到失败:${data.msg}`);
|
||
}
|
||
const {lastUsedTraffic, unUsedTraffic} = data.trafficInfo;
|
||
console.log(`签到成功,${data.msg}`);
|
||
console.log(`总套餐:${data.traffic}`);
|
||
console.log(`已使用:${lastUsedTraffic}`);
|
||
console.log(`剩余流量:${unUsedTraffic}`);
|
||
message += `签到成功,${data.msg}\n`;
|
||
message += `总套餐:${data.traffic}\n`;
|
||
message += `已使用:${lastUsedTraffic}\n`;
|
||
message += `剩余流量:${unUsedTraffic}\n\n`;
|
||
} catch (e) {
|
||
console.error(`签到时发生异常:${e}`);
|
||
}
|
||
} |