diff --git a/README.md b/README.md index 2bc58ea..ef5d3fe 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ uwuzu v1.6.3以上で利用可能です。 - 地震発生 - 緊急地震速報(警報) - 津波予報 +- 新年迎春 + 毎年1/1 0:00に投稿します。 - デバッグモード 設定で有効化することで、以下の機能が利用できます。 開発以外では使用しないでください。 diff --git a/locales/ja.yaml b/locales/ja.yaml index 75d8a28..e455ad2 100644 --- a/locales/ja.yaml +++ b/locales/ja.yaml @@ -50,6 +50,8 @@ eewNotice: | 📍震源地: {{ epicenter }} 💪マグニチュード: {{ magnitude }} 🪨深さ: {{ depth }}{{ areas }} +hnyNotice: | + あけましておめでとうございます。今年は、{{ year }}年です。 commandNotFound: | コマンドが本文から参照できませんでした。 Botでは、このアカウントに対してのメンション部分を取り除きます。 diff --git a/src/feature/hnyNotice.ts b/src/feature/hnyNotice.ts new file mode 100644 index 0000000..aae83f4 --- /dev/null +++ b/src/feature/hnyNotice.ts @@ -0,0 +1,29 @@ +import client from "@/lib/client"; +import initI18n from "@/lib/i18n"; +import i18next from "i18next"; +import { parentPort } from "node:worker_threads"; + +await initI18n(); + +parentPort?.on("message", async () => { + console.log("新年迎春の投稿を行います"); + + try { + const response = await client.request("ueuse/create", { + text: i18next.t("hnyNotice", { year: String(new Date().getFullYear()) }), + }); + + if (!response.success) { + console.warn("新年迎春投稿に失敗しました:", response.error_code); + process.exit(1); + } + + console.log("新年迎春投稿:", response.uniqid); + } catch (err: any) { + console.error("message" in err + ? err.message + : err); + } finally { + parentPort?.postMessage(""); + } +}); \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index cc99953..15d13ba 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,14 +30,34 @@ try { process.exit(1); } -schedule("0 * * * *", async () => { - new Worker(`${import.meta.dirname}/feature/timeNotice.js`); -}); +try { + schedule("0 * * * *", async () => { + new Worker(`${import.meta.dirname}/feature/timeNotice.js`); + }); -schedule("0 7 * * *", async () => { - new Worker(`${import.meta.dirname}/feature/weatherNotice.js`); -}); + schedule("0 7 * * *", async () => { + new Worker(`${import.meta.dirname}/feature/weatherNotice.js`); + }); -schedule(`*/${config.command.interval} * * * *`, async () => { - new Worker(`${import.meta.dirname}/feature/command/index.js`); -}); \ No newline at end of file + schedule(`*/${config.command.interval} * * * *`, async () => { + new Worker(`${import.meta.dirname}/feature/command/index.js`); + }); + + let hnyWorker: Worker | undefined = undefined; + + schedule("59 23 31 12 *", () => { + hnyWorker = new Worker(`${import.meta.dirname}/feature/hnyNotice.js`); + }); + + schedule("0 0 1 1 *", () => { + hnyWorker?.once("message", async () => { + await hnyWorker?.terminate(); + hnyWorker = undefined; + }); + hnyWorker?.postMessage(""); + }); +} catch (err: any) { + console.error("message" in err + ? err.message + : err); +} \ No newline at end of file