91 lines
2.2 KiB
JavaScript
91 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* 관훈 예약 알림 체크
|
|
* 관훈 가는 날 전날에만 알림 발송
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const stateFile = path.join(process.env.HOME, 'openclaw/memory/gwanhun-state.json');
|
|
|
|
// State 파일 없으면 NO_REPLY
|
|
if (!fs.existsSync(stateFile)) {
|
|
console.log('NO_REPLY');
|
|
process.exit(0);
|
|
}
|
|
|
|
let state;
|
|
try {
|
|
state = JSON.parse(fs.readFileSync(stateFile, 'utf8'));
|
|
} catch (e) {
|
|
console.log('NO_REPLY');
|
|
process.exit(0);
|
|
}
|
|
|
|
const gwanhunDateStr = state.date; // "2026-02-06"
|
|
|
|
// 관훈일 미확정이면 NO_REPLY
|
|
if (!gwanhunDateStr || !state.confirmed) {
|
|
console.log('NO_REPLY');
|
|
process.exit(0);
|
|
}
|
|
|
|
// 날짜 형식 검증 (YYYY-MM-DD)
|
|
if (!/^\d{4}-\d{2}-\d{2}$/.test(gwanhunDateStr)) {
|
|
console.log('NO_REPLY');
|
|
process.exit(0);
|
|
}
|
|
|
|
/**
|
|
* 한국 시간 기준 오늘 날짜 (YYYY-MM-DD)
|
|
*/
|
|
function getTodayKST() {
|
|
const now = new Date();
|
|
const kstOffset = 9 * 60; // KST = UTC+9
|
|
const utcTime = now.getTime() + (now.getTimezoneOffset() * 60000);
|
|
const kstTime = new Date(utcTime + (kstOffset * 60000));
|
|
|
|
const year = kstTime.getFullYear();
|
|
const month = String(kstTime.getMonth() + 1).padStart(2, '0');
|
|
const day = String(kstTime.getDate()).padStart(2, '0');
|
|
|
|
return `${year}-${month}-${day}`;
|
|
}
|
|
|
|
/**
|
|
* 날짜 문자열에서 하루 빼기 (YYYY-MM-DD)
|
|
*/
|
|
function subtractDay(dateStr) {
|
|
const [year, month, day] = dateStr.split('-').map(Number);
|
|
const date = new Date(Date.UTC(year, month - 1, day));
|
|
date.setUTCDate(date.getUTCDate() - 1);
|
|
|
|
const newYear = date.getUTCFullYear();
|
|
const newMonth = String(date.getUTCMonth() + 1).padStart(2, '0');
|
|
const newDay = String(date.getUTCDate()).padStart(2, '0');
|
|
|
|
return `${newYear}-${newMonth}-${newDay}`;
|
|
}
|
|
|
|
try {
|
|
const todayStr = getTodayKST();
|
|
const dayBeforeStr = subtractDay(gwanhunDateStr);
|
|
|
|
// 오늘이 관훈일 전날이면 알림
|
|
if (todayStr === dayBeforeStr) {
|
|
const dayName = state.day || '내일';
|
|
console.log(`🏢 **관훈 자리 예약하세요!**
|
|
|
|
${dayName} 관훈 출근입니다.
|
|
점심 자리 예약 잊지 마세요.
|
|
|
|
📍 관훈: 서울 종로구 인사동7길 32`);
|
|
} else {
|
|
console.log('NO_REPLY');
|
|
}
|
|
} catch (e) {
|
|
console.log('NO_REPLY');
|
|
process.exit(0);
|
|
}
|