From 587a3852386d5f06c8c647d374281a4d9c96e219 Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 01:40:19 +0900 Subject: [PATCH 1/8] wip --- src/index.ts | 2 + src/modules/earthquake/index.ts | 116 +++++++++++++++++++++++++++++ src/modules/earthquake/typeMemo.cs | 38 ++++++++++ 3 files changed, 156 insertions(+) create mode 100644 src/modules/earthquake/index.ts create mode 100644 src/modules/earthquake/typeMemo.cs diff --git a/src/index.ts b/src/index.ts index 353db8b..5f5b4c0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,6 +35,7 @@ import SleepReportModule from './modules/sleep-report'; import NotingModule from './modules/noting'; // import PollModule from './modules/poll'; import ReminderModule from './modules/reminder'; +import earthquake from './modules/earthquake'; import DicModule from './modules/dic'; import menuModule from './modules/menu'; import GetColorModule from './modules/color'; @@ -96,6 +97,7 @@ promiseRetry(retry => { new DicModule(), new menuModule(), new GetColorModule(), + new earthquake(), ]); }).catch(e => { log(chalk.red('Failed to fetch the account')); diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts new file mode 100644 index 0000000..0ee8742 --- /dev/null +++ b/src/modules/earthquake/index.ts @@ -0,0 +1,116 @@ +import autobind from "autobind-decorator"; +import Module from "@/module"; +import Message from "@/message"; +import * as http from "http"; + +// 基本的に生データはstringばっかり。都合のいい形に加工済みの状態の型定義を書いています。 +// ここでいくらか言及されてる(https://bultar.bbs.fc2.com/?act=reply&tid=5645851); +interface 緊急地震速報 { + type: 'eew'; + time: Date; + report: string; // 第n報 最終報はstringで'final'となるので、とりあえずstring型 + epicenter: string; // 震源地 + depth: string; // 震源の深さ + magnitude: string; // 地震の規模を示すマグニチュード + latitude: string; // 緯度らしいが謎 + longitude: string; // 経度らしいが謎 + intensity: string; // 地震の強さ + index: number; // 謎 +} + +interface 緊急地震速報キャンセル { + type: 'pga_alert_cancel'; + time: Date; +} + +interface 震度レポート { + type: 'intensity_report'; + time: Date; + max_index: number; + intensity_list: { + intensity: string; + index: number; + region_list: string[]; + }[]; +} + +interface 地震検知 { + type: 'pga_alert'; + time: Date; + max_pga: number; + new: boolean; + estimated_intensity: number; + region_list: string[]; +} + +export default class extends Module { + public readonly name = "earthquake"; + private message: string = ""; + + @autobind + public install() { + this.createListenServer(); + return {}; + } + + @autobind + private async createListenServer() { + http.createServer(async (req, res) => { + const buffers: Buffer[] = []; + for await (const chunk of req) { + buffers.push(chunk); + } + + const rawDataString = Buffer.concat(buffers).toString(); + // rawDataString について、Unicodeエスケープシーケンスが含まれていたら通常の文字列に変換する + // JSONでなければreturn falseする + if (rawDataString.match(/\\u[0-9a-f]{4}/)) { + const rawDataJSON = JSON.parse( + rawDataString.replace(/\\u([\d\w]{4})/g, (match, p1) => { + return String.fromCharCode(parseInt(p1, 16)); + }), + ); + + if (rawDataJSON.type == "pga_alert") { + const data: 地震検知 = { + type: rawDataJSON.type, + time: new Date(parseInt(rawDataJSON.time)), + max_pga: rawDataJSON.max_pga, + new: rawDataJSON.new, + estimated_intensity: rawDataJSON.estimated_intensity, + region_list: rawDataJSON.region_list, + }; + this.message = + // region_listはオブジェクトなので、2行改行してから列挙する + `PGA Alert\n${data.time.toLocaleString()}\n${data.max_pga}\n${data.estimated_intensity}\n\n${data.region_list.join("\n")}`; + }else if (rawDataJSON.type == 'intensity_report'){ + const data: 震度レポート = { + type: rawDataJSON.type, + time: new Date(parseInt(rawDataJSON.time)), + max_index: rawDataJSON.max_index, + intensity_list: rawDataJSON.intensity_list, + } + this.message = + `Intensity Report\n${data.time.toLocaleString()}\n\n${data.intensity_list.map(intensity => `震度${intensity.intensity} ${intensity.region_list.join(" ")}`).join("\n")}`; + } + this.returnResponse(res, "ok"); + if (this.message) { + this.ai.post({ + visibility: "home", + text: this.message, + }); + } + } else { + this.returnResponse(res, "debobigego"); + } + }).listen(process.env.EARTHQUAKE_PORT || 9999); + } + + @autobind + private returnResponse(res: http.ServerResponse, text: string) { + res.writeHead(200, { + "Content-Type": "text/plain", + }); + res.end(text); + } +} diff --git a/src/modules/earthquake/typeMemo.cs b/src/modules/earthquake/typeMemo.cs new file mode 100644 index 0000000..e8c6b52 --- /dev/null +++ b/src/modules/earthquake/typeMemo.cs @@ -0,0 +1,38 @@ +# 緊急地震速報 +{"type":"eew", +"time":long, +"report":int, +"epicenter":String, +"depth":String, +"magnitude":String, +"latitude":String, +"longitude":String, +"intensity":String, +"index":int +} + +# 地震検知 +{"type":"pga_alert", +"time":long, +"max_pga":float, +"new":boolean, +"estimated_intensity":int, +"region_list":[String,String,,,] +} + +# 地震検知キャンセル +{"type":"pga_alert_cancel", "time":long } + +# 震度レポート +{"type":"intensity_report", +"time":long, +"max_index":int, +"intensity_list":[ +{"intensity":String, +"index":int, +"region_list":[String,String,,,,]}, +{"intensity":String, +"index":int, +"region_list":[String,String,,,,]}, +,,] +} From fb4ed538c6f07e9c33c8049f3a0dcefc309a5289 Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 01:50:23 +0900 Subject: [PATCH 2/8] wip --- src/config.ts | 1 + src/modules/earthquake/index.ts | 69 +++++++++++++++------------------ 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/src/config.ts b/src/config.ts index 1918b4f..81892a6 100644 --- a/src/config.ts +++ b/src/config.ts @@ -12,6 +12,7 @@ type Config = { mecab?: string; mecabDic?: string; memoryDir?: string; + earthQuakeMonitorPort?: number; }; const config = require('../config.json'); diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts index 0ee8742..55eaca7 100644 --- a/src/modules/earthquake/index.ts +++ b/src/modules/earthquake/index.ts @@ -1,41 +1,42 @@ import autobind from "autobind-decorator"; import Module from "@/module"; +import config from "@/config"; import Message from "@/message"; import * as http from "http"; // 基本的に生データはstringばっかり。都合のいい形に加工済みの状態の型定義を書いています。 // ここでいくらか言及されてる(https://bultar.bbs.fc2.com/?act=reply&tid=5645851); interface 緊急地震速報 { - type: 'eew'; - time: Date; - report: string; // 第n報 最終報はstringで'final'となるので、とりあえずstring型 - epicenter: string; // 震源地 - depth: string; // 震源の深さ - magnitude: string; // 地震の規模を示すマグニチュード - latitude: string; // 緯度らしいが謎 - longitude: string; // 経度らしいが謎 - intensity: string; // 地震の強さ - index: number; // 謎 + type: "eew"; + time: Date; + report: string; // 第n報 最終報はstringで'final'となるので、とりあえずstring型 + epicenter: string; // 震源地 + depth: string; // 震源の深さ + magnitude: string; // 地震の規模を示すマグニチュード + latitude: string; // 緯度らしいが謎 + longitude: string; // 経度らしいが謎 + intensity: string; // 地震の強さ + index: number; // 謎 } interface 緊急地震速報キャンセル { - type: 'pga_alert_cancel'; - time: Date; + type: "pga_alert_cancel"; + time: Date; } interface 震度レポート { - type: 'intensity_report'; + type: "intensity_report"; time: Date; max_index: number; intensity_list: { - intensity: string; - index: number; - region_list: string[]; - }[]; + intensity: string; + index: number; + region_list: string[]; + }[]; } interface 地震検知 { - type: 'pga_alert'; + type: "pga_alert"; time: Date; max_pga: number; new: boolean; @@ -71,28 +72,20 @@ export default class extends Module { }), ); - if (rawDataJSON.type == "pga_alert") { - const data: 地震検知 = { + if (rawDataJSON.type == "intensity_report") { + const data: 震度レポート = { type: rawDataJSON.type, time: new Date(parseInt(rawDataJSON.time)), - max_pga: rawDataJSON.max_pga, - new: rawDataJSON.new, - estimated_intensity: rawDataJSON.estimated_intensity, - region_list: rawDataJSON.region_list, + max_index: rawDataJSON.max_index, + intensity_list: rawDataJSON.intensity_list, }; - this.message = - // region_listはオブジェクトなので、2行改行してから列挙する - `PGA Alert\n${data.time.toLocaleString()}\n${data.max_pga}\n${data.estimated_intensity}\n\n${data.region_list.join("\n")}`; - }else if (rawDataJSON.type == 'intensity_report'){ - const data: 震度レポート = { - type: rawDataJSON.type, - time: new Date(parseInt(rawDataJSON.time)), - max_index: rawDataJSON.max_index, - intensity_list: rawDataJSON.intensity_list, - } - this.message = - `Intensity Report\n${data.time.toLocaleString()}\n\n${data.intensity_list.map(intensity => `震度${intensity.intensity} ${intensity.region_list.join(" ")}`).join("\n")}`; - } + this.message = `震度レポート\n${data.time.toLocaleString()}\n\n${ + data.intensity_list.map((intensity) => + `震度${intensity.intensity}: ${intensity.region_list.join(" ")}` + ).join("\n") + }`; + } + console.log(rawDataJSON); // デバッグ用 this.returnResponse(res, "ok"); if (this.message) { this.ai.post({ @@ -103,7 +96,7 @@ export default class extends Module { } else { this.returnResponse(res, "debobigego"); } - }).listen(process.env.EARTHQUAKE_PORT || 9999); + }).listen(config.earthQuakeMonitorPort || 9999); } @autobind From 4133d9aeb30fd3df76728dd4de1bfc6abcd2f3d1 Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 02:40:31 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=98=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 ++-- src/modules/earthquake/index.ts | 28 ++++++++++++++++--- .../earthquake/{typeMemo.cs => typeMemo.c} | 0 3 files changed, 27 insertions(+), 6 deletions(-) rename src/modules/earthquake/{typeMemo.cs => typeMemo.c} (100%) diff --git a/.vscode/settings.json b/.vscode/settings.json index 68ecdba..9397f56 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "typescript.tsdk": "node_modules\\typescript\\lib" -} \ No newline at end of file + "typescript.tsdk": "node_modules\\typescript\\lib", + "C_Cpp.errorSquiggles": "Disabled" +} diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts index 55eaca7..16d9313 100644 --- a/src/modules/earthquake/index.ts +++ b/src/modules/earthquake/index.ts @@ -48,6 +48,8 @@ export default class extends Module { public readonly name = "earthquake"; private message: string = ""; + private earthQuakeIndex: string[] = ["0未満", "0", "1", "2", "3", "4", "5弱", "5強", "6弱", "7"] + @autobind public install() { this.createListenServer(); @@ -65,7 +67,7 @@ export default class extends Module { const rawDataString = Buffer.concat(buffers).toString(); // rawDataString について、Unicodeエスケープシーケンスが含まれていたら通常の文字列に変換する // JSONでなければreturn falseする - if (rawDataString.match(/\\u[0-9a-f]{4}/)) { + if (rawDataString.match(/\\u[0-9a-f]{4}/) || true) { const rawDataJSON = JSON.parse( rawDataString.replace(/\\u([\d\w]{4})/g, (match, p1) => { return String.fromCharCode(parseInt(p1, 16)); @@ -79,16 +81,34 @@ export default class extends Module { max_index: rawDataJSON.max_index, intensity_list: rawDataJSON.intensity_list, }; - this.message = `震度レポート\n${data.time.toLocaleString()}\n\n${ + this.message = `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度:${this.earthQuakeIndex[data.max_index + 1]}\n\n${ data.intensity_list.map((intensity) => - `震度${intensity.intensity}: ${intensity.region_list.join(" ")}` + `震度${this.earthQuakeIndex[intensity.index + 1]}: ${intensity.region_list.join(" ")}` ).join("\n") }`; - } + } if (rawDataJSON.type == 'eew' && false) { + const data: 緊急地震速報 = { + type: rawDataJSON.type, + time: new Date(parseInt(rawDataJSON.time)), + report: rawDataJSON.report, + epicenter: rawDataJSON.epicenter, + depth: rawDataJSON.depth, + magnitude: rawDataJSON.magnitude, + latitude: rawDataJSON.latitude, + longitude: rawDataJSON.longitude, + intensity: rawDataJSON.intensity, + index: rawDataJSON.index, + } + + if (data.report == '1') { + this.message = `**TEST TEST TEST TEST**\n地震かも?\n\n緊急地震速報\n${data.time.toLocaleString()}\n\n第${data.report}報\n震源地: ${data.epicenter}\n震源の深さ: ${data.depth}\n地震の規模(M): ${data.magnitude}\n緯度: ${data.latitude}\n経度: ${data.longitude}\n予想される最大震度(?): ${data.intensity}\n`; + } + } console.log(rawDataJSON); // デバッグ用 this.returnResponse(res, "ok"); if (this.message) { this.ai.post({ + cw: "試験運用中!!!!!", visibility: "home", text: this.message, }); diff --git a/src/modules/earthquake/typeMemo.cs b/src/modules/earthquake/typeMemo.c similarity index 100% rename from src/modules/earthquake/typeMemo.cs rename to src/modules/earthquake/typeMemo.c From a6ccecc155c4f8fe96cf77996683826a7d9d444f Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 02:44:21 +0900 Subject: [PATCH 4/8] =?UTF-8?q?CO=E7=B7=A8=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/earthquake/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts index 16d9313..b872f82 100644 --- a/src/modules/earthquake/index.ts +++ b/src/modules/earthquake/index.ts @@ -86,7 +86,7 @@ export default class extends Module { `震度${this.earthQuakeIndex[intensity.index + 1]}: ${intensity.region_list.join(" ")}` ).join("\n") }`; - } if (rawDataJSON.type == 'eew' && false) { + } if (rawDataJSON.type == 'eew' && false) { // これ使わなさそうだしとりあえず入らないようにした const data: 緊急地震速報 = { type: rawDataJSON.type, time: new Date(parseInt(rawDataJSON.time)), From 23391583df0496b8f413fb5c9f812cc031f3736a Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 02:51:18 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=83=87=E3=83=B3?= =?UTF-8?q?=E3=83=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/earthquake/index.ts | 68 +++++++++++++-------- src/modules/earthquake/テスト用生データ.txt | 4 ++ 2 files changed, 47 insertions(+), 25 deletions(-) create mode 100644 src/modules/earthquake/テスト用生データ.txt diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts index b872f82..152fde5 100644 --- a/src/modules/earthquake/index.ts +++ b/src/modules/earthquake/index.ts @@ -48,7 +48,18 @@ export default class extends Module { public readonly name = "earthquake"; private message: string = ""; - private earthQuakeIndex: string[] = ["0未満", "0", "1", "2", "3", "4", "5弱", "5強", "6弱", "7"] + private earthQuakeIndex: string[] = [ + "0未満", + "0", + "1", + "2", + "3", + "4", + "5弱", + "5強", + "6弱", + "7", + ]; @autobind public install() { @@ -81,34 +92,41 @@ export default class extends Module { max_index: rawDataJSON.max_index, intensity_list: rawDataJSON.intensity_list, }; - this.message = `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度:${this.earthQuakeIndex[data.max_index + 1]}\n\n${ - data.intensity_list.map((intensity) => - `震度${this.earthQuakeIndex[intensity.index + 1]}: ${intensity.region_list.join(" ")}` - ).join("\n") - }`; - } if (rawDataJSON.type == 'eew' && false) { // これ使わなさそうだしとりあえず入らないようにした - const data: 緊急地震速報 = { - type: rawDataJSON.type, - time: new Date(parseInt(rawDataJSON.time)), - report: rawDataJSON.report, - epicenter: rawDataJSON.epicenter, - depth: rawDataJSON.depth, - magnitude: rawDataJSON.magnitude, - latitude: rawDataJSON.latitude, - longitude: rawDataJSON.longitude, - intensity: rawDataJSON.intensity, - index: rawDataJSON.index, - } + this.message = + `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度:${ + this.earthQuakeIndex[data.max_index + 1] + }\n\n${ + data.intensity_list.map((intensity) => + `震度${this.earthQuakeIndex[intensity.index + 1]}: ${ + intensity.region_list.join(" ") + }` + ).join("\n") + }`; + } + if (rawDataJSON.type == "eew" && false) { // これ使わなさそうだしとりあえず入らないようにした + const data: 緊急地震速報 = { + type: rawDataJSON.type, + time: new Date(parseInt(rawDataJSON.time)), + report: rawDataJSON.report, + epicenter: rawDataJSON.epicenter, + depth: rawDataJSON.depth, + magnitude: rawDataJSON.magnitude, + latitude: rawDataJSON.latitude, + longitude: rawDataJSON.longitude, + intensity: rawDataJSON.intensity, + index: rawDataJSON.index, + }; - if (data.report == '1') { - this.message = `**TEST TEST TEST TEST**\n地震かも?\n\n緊急地震速報\n${data.time.toLocaleString()}\n\n第${data.report}報\n震源地: ${data.epicenter}\n震源の深さ: ${data.depth}\n地震の規模(M): ${data.magnitude}\n緯度: ${data.latitude}\n経度: ${data.longitude}\n予想される最大震度(?): ${data.intensity}\n`; - } - } - console.log(rawDataJSON); // デバッグ用 + if (data.report == "1") { + this.message = + `**TEST TEST TEST TEST**\n地震かも?\n\n緊急地震速報\n${data.time.toLocaleString()}\n\n第${data.report}報\n震源地: ${data.epicenter}\n震源の深さ: ${data.depth}\n地震の規模(M): ${data.magnitude}\n緯度: ${data.latitude}\n経度: ${data.longitude}\n予想される最大震度(?): ${data.intensity}\n`; + } + } + console.log(rawDataJSON); // デバッグ用 this.returnResponse(res, "ok"); if (this.message) { this.ai.post({ - cw: "試験運用中!!!!!", + cw: "試験運用中!!!!!", visibility: "home", text: this.message, }); diff --git a/src/modules/earthquake/テスト用生データ.txt b/src/modules/earthquake/テスト用生データ.txt new file mode 100644 index 0000000..9d4696d --- /dev/null +++ b/src/modules/earthquake/テスト用生データ.txt @@ -0,0 +1,4 @@ +# テスト用生データ +{"type":"pga_alert","time":"1649085285968","max_pga":-0.531,"new":true,"estimated_intensity":0,"region_list":["\u8328\u57ce"]} +{"type":"intensity_report","time":"1649085285968","max_index":-1,"intensity_list":[{"intensity":"0\u672a\u6e80","index":-1,"region_list":["\u8328\u57ce"]}]} +{"type": "eew","report": "1","epicenter": "伊予灘","depth": "60km","magnitude": 3.5,"latitude": 33.8,"longitude": 132.1,"intensity": "2","index": 2} From 59cdd5849f02e132aa86ceea2fca2a71c6af9a83 Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 09:50:08 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=E3=81=A1=E3=82=87=E3=81=A3=E3=81=A8?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/earthquake/index.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts index 152fde5..fe6ce5d 100644 --- a/src/modules/earthquake/index.ts +++ b/src/modules/earthquake/index.ts @@ -48,7 +48,7 @@ export default class extends Module { public readonly name = "earthquake"; private message: string = ""; - private earthQuakeIndex: string[] = [ + private earthquakeIntensityIndex: string[] = [ "0未満", "0", "1", @@ -58,6 +58,7 @@ export default class extends Module { "5弱", "5強", "6弱", + "6強", "7", ]; @@ -94,10 +95,10 @@ export default class extends Module { }; this.message = `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度:${ - this.earthQuakeIndex[data.max_index + 1] + this.earthquakeIntensityIndex[data.max_index + 1] }\n\n${ data.intensity_list.map((intensity) => - `震度${this.earthQuakeIndex[intensity.index + 1]}: ${ + `震度${this.earthquakeIntensityIndex[intensity.index + 1]}: ${ intensity.region_list.join(" ") }` ).join("\n") @@ -122,7 +123,12 @@ export default class extends Module { `**TEST TEST TEST TEST**\n地震かも?\n\n緊急地震速報\n${data.time.toLocaleString()}\n\n第${data.report}報\n震源地: ${data.epicenter}\n震源の深さ: ${data.depth}\n地震の規模(M): ${data.magnitude}\n緯度: ${data.latitude}\n経度: ${data.longitude}\n予想される最大震度(?): ${data.intensity}\n`; } } - console.log(rawDataJSON); // デバッグ用 + + console.table(rawDataJSON); // デバッグ用 + if (rawDataJSON.type == 'intensity_report') { + console.table(rawDataJSON.region_list); // デバッグ用 + } + this.returnResponse(res, "ok"); if (this.message) { this.ai.post({ From dc3b7dd954c0258344826c77675af8c873f72200 Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 09:57:23 +0900 Subject: [PATCH 7/8] =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=87=BA=E3=81=99?= =?UTF-8?q?=E3=81=A8=E3=81=8D=E3=81=AE=E6=9C=80=E5=A4=A7=E9=9C=87=E5=BA=A6?= =?UTF-8?q?=E3=81=97=E3=81=8D=E3=81=84=E5=80=A4=E3=81=BE=E3=82=8F=E3=82=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/earthquake/index.ts | 37 ++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts index fe6ce5d..d95b590 100644 --- a/src/modules/earthquake/index.ts +++ b/src/modules/earthquake/index.ts @@ -48,6 +48,7 @@ export default class extends Module { public readonly name = "earthquake"; private message: string = ""; + private thresholdVal = 0; // 下の配列の添え字に相当する値。しきい値以上のものについて通知を出す。 private earthquakeIntensityIndex: string[] = [ "0未満", "0", @@ -87,22 +88,24 @@ export default class extends Module { ); if (rawDataJSON.type == "intensity_report") { - const data: 震度レポート = { - type: rawDataJSON.type, - time: new Date(parseInt(rawDataJSON.time)), - max_index: rawDataJSON.max_index, - intensity_list: rawDataJSON.intensity_list, - }; - this.message = - `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度:${ - this.earthquakeIntensityIndex[data.max_index + 1] - }\n\n${ - data.intensity_list.map((intensity) => - `震度${this.earthquakeIntensityIndex[intensity.index + 1]}: ${ - intensity.region_list.join(" ") - }` - ).join("\n") - }`; + if (rawDataJSON.max_index >= this.thresholdVal) { + const data: 震度レポート = { + type: rawDataJSON.type, + time: new Date(parseInt(rawDataJSON.time)), + max_index: rawDataJSON.max_index, + intensity_list: rawDataJSON.intensity_list, + }; + this.message = + `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度:${ + this.earthquakeIntensityIndex[data.max_index + 1] + }\n\n${ + data.intensity_list.map((intensity) => + `震度${this.earthquakeIntensityIndex[intensity.index + 1]}: ${ + intensity.region_list.join(" ") + }` + ).join("\n") + }`; + } } if (rawDataJSON.type == "eew" && false) { // これ使わなさそうだしとりあえず入らないようにした const data: 緊急地震速報 = { @@ -123,7 +126,7 @@ export default class extends Module { `**TEST TEST TEST TEST**\n地震かも?\n\n緊急地震速報\n${data.time.toLocaleString()}\n\n第${data.report}報\n震源地: ${data.epicenter}\n震源の深さ: ${data.depth}\n地震の規模(M): ${data.magnitude}\n緯度: ${data.latitude}\n経度: ${data.longitude}\n予想される最大震度(?): ${data.intensity}\n`; } } - + console.table(rawDataJSON); // デバッグ用 if (rawDataJSON.type == 'intensity_report') { console.table(rawDataJSON.region_list); // デバッグ用 From 5f8c7d957228e2f2de5ea28257871d16daa4b86d Mon Sep 17 00:00:00 2001 From: na2na <49822810+na2na-p@users.noreply.github.com> Date: Tue, 5 Apr 2022 16:52:44 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=E3=81=A8=E3=82=8A=E3=81=82=E3=81=88?= =?UTF-8?q?=E3=81=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/earthquake/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/modules/earthquake/index.ts b/src/modules/earthquake/index.ts index d95b590..3237657 100644 --- a/src/modules/earthquake/index.ts +++ b/src/modules/earthquake/index.ts @@ -48,7 +48,7 @@ export default class extends Module { public readonly name = "earthquake"; private message: string = ""; - private thresholdVal = 0; // 下の配列の添え字に相当する値。しきい値以上のものについて通知を出す。 + private thresholdVal = 5; // 下の配列の添え字に相当する値。しきい値以上のものについて通知を出す。 private earthquakeIntensityIndex: string[] = [ "0未満", "0", @@ -88,7 +88,7 @@ export default class extends Module { ); if (rawDataJSON.type == "intensity_report") { - if (rawDataJSON.max_index >= this.thresholdVal) { + if (rawDataJSON.max_index >= this.thresholdVal - 1) { const data: 震度レポート = { type: rawDataJSON.type, time: new Date(parseInt(rawDataJSON.time)), @@ -96,7 +96,7 @@ export default class extends Module { intensity_list: rawDataJSON.intensity_list, }; this.message = - `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度:${ + `地震かも?\n\n震度レポート\n${data.time.toLocaleString()}\n最大震度: ${ this.earthquakeIntensityIndex[data.max_index + 1] }\n\n${ data.intensity_list.map((intensity) => @@ -129,7 +129,7 @@ export default class extends Module { console.table(rawDataJSON); // デバッグ用 if (rawDataJSON.type == 'intensity_report') { - console.table(rawDataJSON.region_list); // デバッグ用 + console.table(rawDataJSON.intensity_list); // デバッグ用 } this.returnResponse(res, "ok");