const db = require('./db'); const AESCipher = require('./crypto'); // const Attendance = require('./attendance'); // 실제 자동화 로직 파일 async function runBot() { console.log(`[${new Date().toISOString()}] 자동 출석 체크를 시작합니다...`); try { const limit = process.env.GET_DOMAIN_COUNT || 5; const accountsToProcess = await db.query(` SELECT dl.DOMAIN_ADDRS, dal.* FROM DOMAIN_ACCNT_LIST dal JOIN DOMAIN_LIST dl ON dal.DOMAIN_SEQ_ID = dl.DOMAIN_SEQ_ID WHERE dal.USE_YN = 'Y' AND dl.USE_YN = 'Y' AND dal.ATNDNC_STRT_DTTM < datetime('now', 'localtime') AND dal.ATNDNC_STTS_CD = '1' LIMIT ? `, [limit]); if (accountsToProcess.length === 0) { console.log("처리할 계정이 없습니다."); return; } console.log(`총 ${accountsToProcess.length}개의 계정을 처리합니다. (최대 ${limit}개)`); const tasks = accountsToProcess.map(account => { account.DECRYPTED_PSWRD = AESCipher.decrypt(account.DOMAIN_ACCNT_PSWRD); // TODO: 실제 자동화 로직(Puppeteer)을 실행하는 부분 // 예: return new Attendance(account).run(); console.log(`[작업 실행] 계정: ${account.DOMAIN_ACCNT_ID} / 사이트: ${account.DOMAIN_ADDRS}`); return Promise.resolve(); // 임시로 즉시 완료 }); await Promise.all(tasks); console.log("모든 계정 처리가 완료되었습니다."); } catch (error) { console.error("봇 실행 중 오류 발생:", error); } } module.exports = { runBot };