Files
wq-h-qinglong/ikuuu-auto-checkin.js
2024-12-19 14:03:09 +08:00

135 lines
3.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
填写注册的邮箱和密码,多账号使用;隔开
export Ikuuu_EMAIL="xxx@.com;xxx@com"
export Ikuuu_PASSWD="A123;A123"
export Ikuuu_HOST="ikuuu.one"
由于 ikuuu 经常更换域名,添加 HOST 环境变量默认为ikuuu.one。若域名更改修改 HOST 的值为对应域名即可
cron: 33 08 * * *
const $ = new Env("ikuuu 机场签到");
*/
const { sendNotify } = require("./sendNotify"); // 引入 sendNotify.js 模块
const host = process.env.Ikuuu_HOST || "ikuuu.one";
const protocolPrefix = "https://";
const logInUrl = `${protocolPrefix}${host}/auth/login`;
const checkInUrl = `${protocolPrefix}${host}/user/checkin`;
function parseCookie(rawCookie) {
let cookieSets = rawCookie.split("path=/,");
const cookies = {};
cookieSets.forEach((cookie) => {
const match = cookie.match(/^([^=]+)=(.*?);/);
if (match) {
const fieldName = match[1].trim();
let fieldValue = match[2].trim();
fieldValue = decodeURIComponent(fieldValue);
if (!cookies[fieldName]) {
cookies[fieldName] = fieldValue;
}
}
});
return cookies;
}
function generateCookieStr(cookieObject) {
return Object.entries(cookieObject)
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
.join("; ");
}
async function logIn(email, passwd) {
console.log(`Logging in with email: ${email}...`);
let formData = new FormData();
formData.append("host", host);
formData.append("email", email);
formData.append("passwd", passwd);
formData.append("code", "");
formData.append("remember_me", "off");
let response = await fetch(logInUrl, {
method: "POST",
body: formData,
});
let rawCookie = response.headers.get("set-cookie");
let responseJson = await response.json();
if (responseJson) {
console.log(responseJson.msg);
}
return parseCookie(rawCookie);
}
function checkIn(cookie) {
return fetch(checkInUrl, {
method: "POST",
headers: {
Cookie: generateCookieStr(cookie),
},
})
.then((res) => res.json())
.then((resJson) => {
if (resJson) {
console.log(resJson.msg);
}
});
}
// 延迟函数,单位为毫秒
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function main() {
let emails = process.env.Ikuuu_EMAIL;
let passwords = process.env.Ikuuu_PASSWD;
if (!emails || !passwords) {
console.log("ENV ERROR: Please set both Ikuuu_EMAIL and Ikuuu_PASSWD.");
process.exit(1);
}
let emailList = emails.split(";");
let passwdList = passwords.split(";");
if (emailList.length !== passwdList.length) {
console.log("Error: The number of emails does not match the number of passwords.");
process.exit(1);
}
// 创建一个通知数组,避免多次发送相同的消息
let notifications = [];
// 遍历每个账号执行登录并签到
for (let i = 0; i < emailList.length; i++) {
let email = emailList[i];
let passwd = passwdList[i];
let cookie = await logIn(email, passwd);
await checkIn(cookie);
// 每个账号的操作只添加一条通知
notifications.push(`账号 ${email} 登录成功,签到完成`);
// 每次登录后延迟 2 秒
await delay(2000); // 延迟 2 秒
}
// 合并所有通知为一条消息,避免多次发送
const notificationMessage = notifications.join("\n");
// 发送合并后的消息通知
sendNotify(`多个账号操作完成:\n${notificationMessage}`);
}
main();