diff --git a/ikuuu-auto-checkin.js b/ikuuu-auto-checkin.js new file mode 100644 index 0000000..309d7f1 --- /dev/null +++ b/ikuuu-auto-checkin.js @@ -0,0 +1,134 @@ +/* +填写注册的邮箱和密码,多账号使用;隔开 +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();