哗哗资源分享-专注互联网创业,信息差副业研究,拒绝割韭菜
哗哗资源分享-专注互联网创业,信息差副业研究,拒绝割韭菜

亿鼎悦呈每日自动签到 JS 脚本

亿鼎悦呈每日自动签到 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();

 

温馨提示: 本文最后更新于2025-11-12 10:47:23,某些文章具有时效性,若有错误或已失效,请在下方 留言或联系 哗哗资源分享
© 版权声明
THE END
喜欢就支持一下吧
点赞6赞赏 分享