From e3451323f3f09ba481cea0b495424096a4a50458 Mon Sep 17 00:00:00 2001 From: Last2014 Date: Fri, 4 Jul 2025 19:07:05 +0900 Subject: [PATCH] =?UTF-8?q?=E6=99=82=E5=A0=B1=20=E3=81=AE=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E6=9C=9F=E9=96=93=E8=A8=AD=E5=AE=9A=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=E3=83=BB=E5=9C=B0=E9=9C=87=E7=99=BA?= =?UTF-8?q?=E7=94=9F=E3=81=8A=E7=9F=A5=E3=82=89=E3=81=9B=E3=81=AB=E3=83=9E?= =?UTF-8?q?=E3=82=B0=E3=83=8B=E3=83=81=E3=83=A5=E3=83=BC=E3=83=89/?= =?UTF-8?q?=E6=B7=B1=E3=81=95=E3=82=92=E8=BF=BD=E5=8A=A0=E3=83=BB=E5=A4=A9?= =?UTF-8?q?=E6=B0=97=E3=81=8A=E7=9F=A5=E3=82=89=E3=81=9B=E3=81=AB%?= =?UTF-8?q?=E3=81=8C2=E3=81=A4=E4=BB=98=E3=81=8F=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=E3=83=BB=E5=9C=B0=E5=9F=9F=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E6=9B=B4=E6=96=B0=E3=81=8C=E6=AD=A3=E5=B8=B8=E3=81=AB?= =?UTF-8?q?=E7=99=BA=E4=BF=A1=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E5=95=8F?= =?UTF-8?q?=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3=E3=83=BB=E5=9C=B0=E5=9F=9F?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E6=9B=B4=E6=96=B0=E3=81=AE=E3=83=AC=E3=83=BC?= =?UTF-8?q?=E3=83=88=E5=88=B6=E9=99=90=E3=81=AE=E3=83=87=E3=83=95=E3=82=A9?= =?UTF-8?q?=E3=83=AB=E3=83=88=E8=A8=AD=E5=AE=9A=E3=82=9230=E5=88=86?= =?UTF-8?q?=E3=81=AB=E4=B8=80=E5=9B=9E=E3=81=AB=E3=83=BBv4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/config.ts | 8 +++++- package.json | 2 +- scripts/earthquakeNotice.ts | 28 +++++++++++++++++++- scripts/timeNotice.ts | 51 +++++++++++++++++++++++-------------- scripts/weatherNotice.ts | 2 +- types/config.d.ts | 10 ++++++++ 6 files changed, 78 insertions(+), 23 deletions(-) diff --git a/examples/config.ts b/examples/config.ts index 6e4b970..da60546 100644 --- a/examples/config.ts +++ b/examples/config.ts @@ -2,12 +2,18 @@ import type { configTypes } from "types/config"; // READMEの設定項目を参照 const config: configTypes = { + time: { + stopTimes: { + start: new Date("23:00"), + stop: new Date("6:00"), + } + }, earthquake: { reconnectTimes: 5000, websocketUrl: "wss://api.p2pquake.net/v2/ws", areasCsvUrl: "https://raw.githubusercontent.com/p2pquake/epsp-specifications/master/epsp-area.csv", maxScaleMax: 30, - rateLimit: 10, + rateLimit: 30, }, weather: { splitCount: 4, diff --git a/package.json b/package.json index 447d406..7c30387 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "noticeuwuzu", - "version": "v3.5.6@uwuzu1.5.4", + "version": "v4.0@uwuzu1.5.4", "description": "uwuzu Notice Bot", "main": "dist/main.js", "scripts": { diff --git a/scripts/earthquakeNotice.ts b/scripts/earthquakeNotice.ts index ef38673..46ad5aa 100644 --- a/scripts/earthquakeNotice.ts +++ b/scripts/earthquakeNotice.ts @@ -291,11 +291,37 @@ async function event(earthquakeInfo: any): Promise { description = `この地震について:${earthquakeInfo.comments.freeFormComment}`; } + // 深さ + let depth: string = ""; + + if ( + earthquakeInfo.earthquake.hypocenter.depth !== null || + earthquakeInfo.earthquake.hypocenter.depth !== -1 + ) { + if (earthquakeInfo.earthquake.hypocenter.depth === 0) { + depth = "深さ:ごく浅い"; + } else { + depth = `深さ:${earthquakeInfo.hypocenter.depth}km`; + } + } + + // マグニチュード + let magnitude: string = ""; + + if( + earthquakeInfo.earthquake.hypocenter.magnitude !== null || + earthquakeInfo.earthquake.hypocenter.magnitude !== -1 + ) { + magnitude = `マグニチュード:${earthquakeInfo.earthquake.hypocenter.magnitude}`; + } + ueuse(` ==地震情報== 【地震発生】 時刻:${earthquakeInfo.time} ${description} + ${magnitude} + ${depth} ${maxScale} ${areas} 国内の津波:${domesticTsunami} @@ -323,7 +349,7 @@ async function event(earthquakeInfo: any): Promise { const areas = areaNames.join("・"); - if (differenceInMinutes(new Date(), rateLimit) >= config.earthquake.rateLimit) { + if (differenceInMinutes(rateLimit, new Date()) >= config.earthquake.rateLimit) { ueuse(` ==地震情報== 【地域情報更新】 diff --git a/scripts/timeNotice.ts b/scripts/timeNotice.ts index 45a3253..8407dc7 100644 --- a/scripts/timeNotice.ts +++ b/scripts/timeNotice.ts @@ -1,26 +1,39 @@ -import { format } from "date-fns"; +import { format, isAfter, isBefore } from "date-fns"; import type * as types from "types/types"; - import config from "../config.js"; -export default async function timeNotice() { - // 現在時刻を取得 - const now = format(new Date(), "HH:mm"); +// 時刻取得 +const now = new Date(); +const start = config.time.stopTimes.start; +const stop = config.time.stopTimes.stop; - // 投稿 - const resUeuse = await fetch( - `https://${config.uwuzuServer}/api/ueuse/create`, - { - method: "POST", - body: JSON.stringify({ - token: config.apiToken, - text: `${now}になりました`, - }), - }, - ); +// 停止時刻外 +let inRange: Boolean = false; - const ueuseData: types.ueuseCreateApi = await resUeuse.json(); - - console.log(JSON.stringify(ueuseData)); +if (isBefore(start, stop)) { + inRange = isAfter(now, start) && isBefore(now, stop); +} else { + inRange = isAfter(now, start) || isBefore(now, stop); +} + + +export default async function timeNotice() { + if (inRange === false) { + // 投稿 + const resUeuse = await fetch( + `https://${config.uwuzuServer}/api/ueuse/create`, + { + method: "POST", + body: JSON.stringify({ + token: config.apiToken, + text: `${now}になりました`, + }), + }, + ); + + const ueuseData: types.ueuseCreateApi = await resUeuse.json(); + + console.log(JSON.stringify(ueuseData)); + } } diff --git a/scripts/weatherNotice.ts b/scripts/weatherNotice.ts index 5d17d96..938be56 100644 --- a/scripts/weatherNotice.ts +++ b/scripts/weatherNotice.ts @@ -83,7 +83,7 @@ export default async function weatherNotice() { today.chanceOfRain.T06_12 !== null || today.chanceOfRain.T06_12 !== "--%" ) { - chanceOfRain = `${today.chanceOfRain.T06_12}%`; + chanceOfRain = today.chanceOfRain.T06_12; } else { chanceOfRain = "取得できませんでした"; } diff --git a/types/config.d.ts b/types/config.d.ts index 8bdeeae..0ce6af4 100644 --- a/types/config.d.ts +++ b/types/config.d.ts @@ -10,7 +10,17 @@ interface weatherTypes { splitCount: number; } +interface stopsTypes { + start: Date; + stop: Date; +} + +interface timeTypes { + stopTimes: stopsTypes; +} + export interface configTypes { + time: timeTypes, earthquake: earthquakeTypes; weather: weatherTypes;