import { ueuse } from "types/types.js"; import { readFileSync, writeFileSync, existsSync } from "fs"; import { parse, isValid } from 'date-fns/fp'; import { Reply } from "./main.js"; function normalizedString(Str: string) { return Str.replace(/[\u3000-\u303F]+/g, ' ') .replace(/[\uFF01-\uFF0F]+/g, '0-9') .replace(/[\u3001-\u3002]+/g, '/'); } function isValidDateString(dateString: string) { const normalizedStr = normalizedString(dateString); const regex = /^\d{4}\/\d{2}\/\d{2}$/; if (!regex.test(normalizedStr)) { return false; } const parseString = parse(new Date(), 'yyyy/MM/dd'); return isValid(parseString(normalizedStr)); } export default function Birthday(data: ueuse) { // 読み込み const birthdays: { [key: string]: string | undefined } = JSON.parse(readFileSync("data/birthdays.json", "utf-8")); if ( (data.abi === "none" || data.abi === "") && birthdays[data.account.userid] === undefined ) { Reply(` 追記に誕生日を入力してください (このユーズはもう利用できません。他のユーズで\`/birthday\`をまたご利用ください。) `, data.uniqid); return; } if ( data.abi === "delete" && birthdays[data.account.userid] !== undefined ) { birthdays[data.account.userid] = undefined; writeFileSync( "data/birthdays.json", JSON.stringify(birthdays), "utf-8", ); Reply(` 誕生日のデータを削除しました `, data.uniqid); return; } if ( data.abi === "delete" && birthdays[data.account.userid] === undefined ) { Reply(` 誕生日のデータが存在しないため削除できません `, data.uniqid); return; } if (!isValidDateString(data.abi)) { Reply(` 誕生日の形式が違います。 yyyy/MM/ddの形式で入力してください。 スラッシュ・数字は全角での使用が可能です。 (このユーズはもう利用できません。他のユーズで\`/birthday\`をまたご利用ください。) `, data.uniqid); return; } birthdays[data.account.userid] = normalizedString(data.abi); writeFileSync( "data/birthdays.json", JSON.stringify(birthdays), "utf-8", ); Reply(` ${data.account.username}さんの誕生日を${normalizedString(data.abi)}に設定しました `, data.uniqid); }