import * as fs from "fs"; import { format, isAfter } from "date-fns"; import { parse } from "date-fns/fp"; import config from "../config.js"; import sendMail from "../src/mailer.js"; const formatParse = parse(new Date(), "yyyy-MM-dd HH:mm:ss.SSS") // 初期化 if (fs.existsSync("iolog.json") === false) { fs.writeFileSync("iolog.json", JSON.stringify({ start: format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"), stop: "", }), "utf-8"); } export default function successExit() { const iolog = JSON.parse(fs.readFileSync("iolog.json", "utf-8")); if (config.emergency.function) { // 前回の終了確認 const start = formatParse(iolog.start); const stop = formatParse(iolog.stop); if (isAfter(start, stop)) { console.log("前回の終了が適切でない可能性があります"); if (config.emergency.mail.function) { sendMail({ from: "noticeUwuzu自動送信", to: config.emergency.mail.to, subject: "【警告】前回終了が不適切な可能性", html: ` ※noticeUwuzu自動送信によるメールです。 【警告】 BOT管理者さん、noticeUwuzu自動送信メールです。 BOTの前回終了で不適切なデータを検出しました。 これは適切な終了時にはデータを残しデータがない場合に送信されます。 電源を強制的に遮断するなどの行為による可能性があります。 その場合は今後やめ、OSからのシャットダウンを使用してください。 BOTのプログラムが破損していないかご確認ください。 ` }); } console.log("----------------"); } } // 起動時に起動時刻を保存 iolog.start = format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"); fs.writeFileSync("iolog.json", JSON.stringify(iolog), "utf-8"); // 終了時に終了時刻を保存 process.on("exit", () => { const iolog = JSON.parse(fs.readFileSync("iolog.json", "utf-8")); iolog.stop = format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"); fs.writeFileSync("iolog.json", JSON.stringify(iolog), "utf-8"); }); } successExit();