亿鼎悦呈每日自动签到 JS 脚本
变量格式备注#ck#tk
const request = require('request');
const fs = require('fs');
const path = require('path');
// 风险提示
console.log(`
=====================================
⚠️ 脚本使用风险提示 ⚠️
=====================================
本脚本仅供学习交流使用,严禁用于任何商业目的。
使用期间如遇到账号被限制、封禁等异常情况,与作者无关。
使用本脚本即表示您同意上述条款。
=====================================
`);
// 从环境变量获取账号信息 + 变量缺失判断
const accounts = process.env.ACCOUNTS || "";
// 检查环境变量是否为空
if (!accounts.trim()) {
console.error(`
❌ 错误:未检测到账号配置!
请先创建环境变量:
变量名:ACCOUNTS
变量格式:备注#ck#tk(多账号用逗号分隔)
示例:账号1#sl-session=xxx#token1,账号2#sl-session=yyy#token2
`);
process.exit(1); // 终止脚本执行
}
const accountList = accounts.split(',').map(a => a.trim()).filter(a => a);
// 配置信息
const config = {
signUrl: 'https://h5.yidingyuecheng.com/api/mission/sign',
userAgent: 'Mozilla/5.0 (Linux; Android 10; V1914A Build/QP1A.190711.020) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Mobile Safari/537.36',
logDir: path.join(__dirname, 'sign_logs'),
errorLogPath: path.join(__dirname, 'error.log')
};
// 统计信息
const stats = {
total: accountList.length,
success: 0,
failed: 0
};
// 创建日志目录
if (!fs.existsSync(config.logDir)) {
fs.mkdirSync(config.logDir, { recursive: true });
}
// 检查是否已签到
function hasSignedToday(accountNote) {
try {
const logPath = path.join(config.logDir, `${accountNote}.json`);
if (!fs.existsSync(logPath)) return false;
const logData = JSON.parse(fs.readFileSync(logPath, 'utf8'));
const today = new Date().toLocaleDateString();
return logData.lastSignDate === today;
} catch (error) {
return false;
}
}
// 更新签到日志
function updateSignLog(accountNote) {
try {
const logPath = path.join(config.logDir, `${accountNote}.json`);
const today = new Date().toLocaleDateString();
const logData = { lastSignDate: today };
fs.writeFileSync(logPath, JSON.stringify(logData, null, 2), 'utf8');
} catch (error) {}
}
// 发送签到请求
async function signIn(account) {
const parts = account.split('#');
// 简单校验格式(至少包含 备注#ck#tk 三部分)
if (parts.length < 3) {
console.log(`❌ 账号格式错误:${account}(正确格式:备注#ck#tk)`);
stats.failed++;
return;
}
const note = parts[0]; // 只使用备注作为账号标识
const ck = parts[1];
const tk = parts[2];
const startTime = new Date();
console.log(`⏳ ${startTime.toLocaleTimeString()} - 开始签到 (账号: ${note})`);
if (hasSignedToday(note)) {
console.log(`✅ ${new Date().toLocaleTimeString()} - 今日已签到(计入成功) (账号: ${note})`);
stats.success++;
return;
}
const options = {
url: config.signUrl,
method: 'POST',
headers: {
'Cookie': ck,
'Token': tk,
'User-Agent': config.userAgent,
'Content-Type': 'application/json'
},
body: JSON.stringify({})
};
request(options, (error, response, body) => {
const endTime = new Date();
const duration = Math.round((endTime - startTime) / 1000);
if (error || response.statusCode !== 200) {
console.log(`❌ ${endTime.toLocaleTimeString()} - 签到失败 (账号: ${note})`);
stats.failed++;
return;
}
try {
const result = JSON.parse(body);
console.log(`📝 ${endTime.toLocaleTimeString()} - 签到结果: ${result.msg || '未知'} (账号: ${note})`);
if (result.code === 0 || result.success) {
console.log(`✅ ${endTime.toLocaleTimeString()} - 签到成功! (账号: ${note})`);
updateSignLog(note);
stats.success++;
} else {
console.log(`❌ ${endTime.toLocaleTimeString()} - 签到失败: ${result.msg || '未知错误'} (账号: ${note})`);
stats.failed++;
}
} catch (e) {
console.log(`❌ ${endTime.toLocaleTimeString()} - 解析失败 (账号: ${note})`);
stats.failed++;
}
console.log(`⏱️ 执行耗时: ${duration} 秒 (账号: ${note})`);
});
}
// 执行所有账号的签到
async function runAllSignIn() {
console.log(`📊 检测到 ${stats.total} 个账号,开始执行签到任务`);
console.log(`📌 环境变量格式说明:备注#ck#tk(多账号用逗号分隔)\n`);
for (const account of accountList) {
await new Promise(resolve => {
signIn(account);
setTimeout(resolve, 3000); // 延迟3秒执行下一个账号,避免请求过于频繁
});
}
console.log(`
=====================================
📊 签到任务完成统计
=====================================
总账号数: ${stats.total}
成功: ${stats.success}(含已签到账号)
失败: ${stats.failed}
=====================================
`);
}
// 启动签到
runAllSignIn();
© 版权声明
本站内容均转载于互联网,并不代表本站立场!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理!邮箱64067887@qq.com
拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!
THE END












