From 568ae7abf6be9a143240a8c800af0e79fe81d7ed Mon Sep 17 00:00:00 2001 From: Last2014 Date: Sat, 5 Jul 2025 14:06:37 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=87=E3=83=90=E3=83=83=E3=82=B0=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=82=92=E5=88=86=E3=81=8B=E3=82=8A=E3=82=84=E3=81=99?= =?UTF-8?q?=E3=81=8F2(v4.3)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ asciiart.txt | 5 +++++ main.ts | 4 ++++ package.json | 3 ++- scripts/asciiart.ts | 5 +++++ scripts/earthquakeNotice.ts | 14 +++++++++----- scripts/followBack.ts | 8 +++++--- scripts/timeNotice.ts | 9 +++++++-- scripts/weatherNotice.ts | 6 ++++-- 9 files changed, 46 insertions(+), 13 deletions(-) create mode 100644 asciiart.txt create mode 100644 scripts/asciiart.ts diff --git a/README.md b/README.md index 4bef33d..02a5381 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,14 @@ uwuzuで動作するお知らせBOTです。 examples/config.tsをプロジェクトルートへ移動し各設定を更新してください。 ## 設定項目 +time.stopTimes.start: 時報休止期間の開始時刻(HH) +time.stopTimes.stop: 時報休止期間の停止時刻(HH) + earthquake.reconnectTimes:地震情報のWebSocketが切断されたときに自動再接続する時間(ミリ秒) earthquake.websocketUrl:地震情報のWebSocket接続先URL earthquake.areasCsvUrl:地域情報のデータベース(CSV)ファイルのURL +earthquake.maxScaleMin: 地震発生投稿の最低震度(10-70) +earthquake.rateLimit: 地域情報更新のレート制限(分) weather.splitCount:天気お知らせの返信の分割数(4分割を推奨) diff --git a/asciiart.txt b/asciiart.txt new file mode 100644 index 0000000..752595c --- /dev/null +++ b/asciiart.txt @@ -0,0 +1,5 @@ +# # ##### ####### ### ##### ####### # # # # # # ###### # # +## # # # # # ## # # # # # # # # # # # +# ## # # # # # # ###### # # # # # # # # ## # # +# ## # # # # ## # # # # # # # # # # +# # ##### # ### ##### ####### ###### # # ###### ###### ####### diff --git a/main.ts b/main.ts index 861d9fe..b7042ff 100644 --- a/main.ts +++ b/main.ts @@ -6,6 +6,10 @@ import timeNotice from "./scripts/timeNotice.js"; import weatherNotice from "./scripts/weatherNotice.js"; import earthquakeNotice from "./scripts/earthquakeNotice.js"; +// アスキーアート読み込み +import asciiArt from "./scripts/asciiart.js"; +asciiArt(); + // フォローバック機能読み込み import followBack from "./scripts/followBack.js"; diff --git a/package.json b/package.json index a06d7ff..a075d1e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "noticeuwuzu", - "version": "v4.2@uwuzu1.5.4", + "version": "v4.3@uwuzu1.5.4", "description": "uwuzu Notice Bot", "main": "dist/main.js", "scripts": { @@ -29,6 +29,7 @@ "@types/dotenv": "^6.1.1", "@types/node-cron": "^3.0.11", "date-fns": "^4.1.0", + "fs": "^0.0.1-security", "node-cron": "^4.1.1", "tsx": "^4.20.3", "typescript": "^5.8.3", diff --git a/scripts/asciiart.ts b/scripts/asciiart.ts new file mode 100644 index 0000000..196e3f5 --- /dev/null +++ b/scripts/asciiart.ts @@ -0,0 +1,5 @@ +import * as fs from "fs"; + +export default function asciiArt() { + console.log(fs.readFileSync("asciiart.txt", "utf-8")); +} diff --git a/scripts/earthquakeNotice.ts b/scripts/earthquakeNotice.ts index d0156ee..7a64d0a 100644 --- a/scripts/earthquakeNotice.ts +++ b/scripts/earthquakeNotice.ts @@ -20,13 +20,13 @@ class P2PEarthquakeClient { if (this.isConnecting) return; this.isConnecting = true; - console.log("P2P地震情報に接続中"); + console.log("地震情報サーバーに接続中"); try { this.ws = new WebSocket(config.earthquake.websocketUrl); this.ws.on("open", () => { - console.log("P2P地震情報に接続しました"); + console.log("地震情報サーバーに接続しました"); this.isConnecting = false; if (this.reconnectTimer) { @@ -45,7 +45,7 @@ class P2PEarthquakeClient { }); this.ws.on("close", (code: number, reason: Buffer) => { - console.log(`接続が閉じられました: ${code} - ${reason.toString()}`); + console.log(`切断されました: ${code} - ${reason.toString()}`); this.isConnecting = false; this.scheduleReconnect(); }); @@ -75,7 +75,7 @@ class P2PEarthquakeClient { this.executeEventFunc(message); break; case 555: // 地域情報更新情報 - console.log("地域情報更新情報を受信しました"); + console.log("地域情報更新を受信しました"); this.executeEventFunc(message); break; default: @@ -91,6 +91,7 @@ class P2PEarthquakeClient { private scheduleReconnect(): void { if (this.reconnectTimer) return; + console.log("地震情報サーバーから切断されました"); console.log(`${this.reconnectInterval / 1000}秒後に再接続を試みます`); this.reconnectTimer = setTimeout(() => { this.reconnectTimer = null; @@ -361,6 +362,9 @@ async function event(earthquakeInfo: any): Promise { `); rateLimit = new Date(); + } else { + console.log("レート制限に満たしていないため投稿されませんでした"); + return; } } } @@ -376,7 +380,7 @@ async function ueuse(text: string) { const resData = await res.json(); - console.log(JSON.stringify(resData)); + console.log(`地震情報投稿:${JSON.stringify(resData)}`); } export default function earthquakeNotice(): void { diff --git a/scripts/followBack.ts b/scripts/followBack.ts index 9eaa4a5..dec0c22 100644 --- a/scripts/followBack.ts +++ b/scripts/followBack.ts @@ -3,18 +3,20 @@ import type * as types from "types/types"; import config from "../config.js"; export default async function followBack() { + console.log("----------------"); + // フォロワーを取得 const resMe = await fetch( `https://${config.uwuzuServer}/api/me?token=${config.apiToken}`, { method: "GET", - // uwuzu.netで/api/meのPOSTが死んでいるため簡易的にGET + // uwuzu v1.5.4で/api/meのPOSTが死んでいるため簡易的にGET }, ); const meData: types.meApi = await resMe.json(); - console.log(meData); + console.log(`BOTプロフィール:${meData}`); const followers: Array = meData.follower; @@ -35,6 +37,6 @@ export default async function followBack() { const followData: types.followApi = await resFollow.json(); - console.log(JSON.stringify(followData)); + console.log(`フォロー:${JSON.stringify(followData)}`); } } diff --git a/scripts/timeNotice.ts b/scripts/timeNotice.ts index f43e650..1fc674c 100644 --- a/scripts/timeNotice.ts +++ b/scripts/timeNotice.ts @@ -23,7 +23,12 @@ if (start < stop) { export default async function timeNotice() { - if (inRange === false) { + console.log("----------------"); + + if (inRange) { + console.log("時報休止期間のため投稿されませんでした"); + return; + } else { // 投稿 const resUeuse = await fetch( `https://${config.uwuzuServer}/api/ueuse/create`, @@ -38,6 +43,6 @@ export default async function timeNotice() { const ueuseData: types.ueuseCreateApi = await resUeuse.json(); - console.log(JSON.stringify(ueuseData)); + console.log(`時報投稿:${JSON.stringify(ueuseData)}`); } } diff --git a/scripts/weatherNotice.ts b/scripts/weatherNotice.ts index 938be56..ba99c20 100644 --- a/scripts/weatherNotice.ts +++ b/scripts/weatherNotice.ts @@ -5,6 +5,8 @@ import type * as types from "types/types.js"; import config from "../config.js"; export default async function weatherNotice() { + console.log("----------------"); + // 仮投稿 const resUeuse = await fetch( `https://${config.uwuzuServer}/api/ueuse/create`, @@ -22,7 +24,7 @@ export default async function weatherNotice() { const ueuseData: types.ueuseCreateApi = await resUeuse.json(); - console.log(JSON.stringify(ueuseData)); + console.log(`天気仮投稿:${JSON.stringify(ueuseData)}`); // インデックス @@ -114,6 +116,6 @@ export default async function weatherNotice() { const replyData: types.ueuseCreateApi = await resReply.json(); - console.log(JSON.stringify(replyData)); + console.log(`天気投稿:${JSON.stringify(replyData)}`); } }