89 lines
2.4 KiB
TypeScript
89 lines
2.4 KiB
TypeScript
import { ueuse } from "types/types";
|
|
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);
|
|
}
|