koishi-plugin-disaster-warning 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +3 -0
- package/lib/index.js +3 -0
- package/lib/pusher.js +7 -9
- package/lib/service.js +6 -3
- package/package.json +5 -3
package/lib/index.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export interface Config {
|
|
|
20
20
|
global: boolean;
|
|
21
21
|
};
|
|
22
22
|
source_priority: 'auto' | 'wolfx' | 'fanstudio' | 'p2p';
|
|
23
|
+
min_magnitude: number;
|
|
24
|
+
min_intensity: number;
|
|
25
|
+
min_scale: number;
|
|
23
26
|
}
|
|
24
27
|
export declare const Config: Schema<Config>;
|
|
25
28
|
export declare function apply(ctx: Context, config: Config): void;
|
package/lib/index.js
CHANGED
|
@@ -31,6 +31,9 @@ exports.Config = koishi_1.Schema.object({
|
|
|
31
31
|
koishi_1.Schema.const('fanstudio').description('优先使用 FAN Studio'),
|
|
32
32
|
koishi_1.Schema.const('p2p').description('优先使用 P2P地震情報'),
|
|
33
33
|
]).default('auto').description('数据源优先级'),
|
|
34
|
+
min_magnitude: koishi_1.Schema.number().default(4.0).description('最小推送震级(M)'),
|
|
35
|
+
min_intensity: koishi_1.Schema.number().default(4.0).description('最小推送烈度(中国标准)'),
|
|
36
|
+
min_scale: koishi_1.Schema.number().default(3.0).description('最小推送震度(日本标准,3.0=震度3)'),
|
|
34
37
|
});
|
|
35
38
|
function apply(ctx, config) {
|
|
36
39
|
const service = new service_1.DisasterWarningService(ctx, config);
|
package/lib/pusher.js
CHANGED
|
@@ -7,9 +7,6 @@ const logger = new koishi_1.Logger('disaster-pusher');
|
|
|
7
7
|
// Hardcoded filter thresholds - no user configuration needed
|
|
8
8
|
const FILTER_THRESHOLDS = {
|
|
9
9
|
MIN_MAGNITUDE_ABSOLUTE: 3.0, // Always ignore earthquakes below M3.0
|
|
10
|
-
MIN_MAGNITUDE_FOR_PUSH: 4.0, // Push if magnitude >= 4.0
|
|
11
|
-
MIN_INTENSITY_FOR_PUSH: 4.0, // Or push if intensity >= 4.0 (China)
|
|
12
|
-
MIN_SCALE_FOR_PUSH: 4.0, // Or push if shindo scale >= 4 (Japan)
|
|
13
10
|
};
|
|
14
11
|
class MessagePushManager {
|
|
15
12
|
constructor(ctx, config) {
|
|
@@ -33,25 +30,26 @@ class MessagePushManager {
|
|
|
33
30
|
return false; // Don't filter tsunami/weather
|
|
34
31
|
}
|
|
35
32
|
const data = event.data;
|
|
36
|
-
const { MIN_MAGNITUDE_ABSOLUTE
|
|
33
|
+
const { MIN_MAGNITUDE_ABSOLUTE } = FILTER_THRESHOLDS;
|
|
34
|
+
const { min_magnitude, min_intensity, min_scale } = this.config;
|
|
37
35
|
// Always filter out very small earthquakes
|
|
38
36
|
if (data.magnitude !== undefined && data.magnitude < MIN_MAGNITUDE_ABSOLUTE) {
|
|
39
37
|
return true;
|
|
40
38
|
}
|
|
41
39
|
// Pass if magnitude is significant
|
|
42
|
-
if (data.magnitude !== undefined && data.magnitude >=
|
|
40
|
+
if (data.magnitude !== undefined && data.magnitude >= min_magnitude) {
|
|
43
41
|
return false;
|
|
44
42
|
}
|
|
45
43
|
// Pass if intensity is significant (Chinese sources)
|
|
46
|
-
if (data.intensity !== undefined && data.intensity >=
|
|
44
|
+
if (data.intensity !== undefined && data.intensity >= min_intensity) {
|
|
47
45
|
return false;
|
|
48
46
|
}
|
|
49
47
|
// Pass if scale is significant (Japanese sources)
|
|
50
|
-
if (data.scale !== undefined && data.scale >=
|
|
48
|
+
if (data.scale !== undefined && data.scale >= min_scale) {
|
|
51
49
|
return false;
|
|
52
50
|
}
|
|
53
|
-
// If magnitude is between 3.0
|
|
54
|
-
if (data.magnitude !== undefined && data.magnitude >= MIN_MAGNITUDE_ABSOLUTE && data.magnitude <
|
|
51
|
+
// If magnitude is between 3.0 and min_magnitude, and no significant intensity/scale, filter out
|
|
52
|
+
if (data.magnitude !== undefined && data.magnitude >= MIN_MAGNITUDE_ABSOLUTE && data.magnitude < min_magnitude) {
|
|
55
53
|
// Only filter if we don't have intensity/scale data that would make it significant
|
|
56
54
|
if (data.intensity === undefined && data.scale === undefined) {
|
|
57
55
|
return true;
|
package/lib/service.js
CHANGED
|
@@ -45,9 +45,10 @@ class DisasterWarningService {
|
|
|
45
45
|
// Close all connections
|
|
46
46
|
for (const key in this.connections) {
|
|
47
47
|
const ws = this.connections[key];
|
|
48
|
-
// Remove listeners to prevent
|
|
49
|
-
ws.removeAllListeners(
|
|
50
|
-
|
|
48
|
+
// Remove all listeners to prevent any further events
|
|
49
|
+
ws.removeAllListeners();
|
|
50
|
+
// Force close the connection
|
|
51
|
+
ws.terminate();
|
|
51
52
|
delete this.connections[key];
|
|
52
53
|
}
|
|
53
54
|
logger.info('Disaster Warning Service stopped.');
|
|
@@ -114,6 +115,8 @@ class DisasterWarningService {
|
|
|
114
115
|
logger.info(`Connected to ${name}`);
|
|
115
116
|
});
|
|
116
117
|
ws.on('message', (data) => {
|
|
118
|
+
if (this.stopped)
|
|
119
|
+
return;
|
|
117
120
|
try {
|
|
118
121
|
const parsed = JSON.parse(data.toString());
|
|
119
122
|
onMessage(parsed);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-disaster-warning",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.10",
|
|
4
4
|
"description": "Koishi 灾害预警插件,支持多数据源(地震、海啸、气象预警)",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"lumia.wang <fenglian19980510@gmail.com>"
|
|
@@ -34,12 +34,14 @@
|
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"koishi": "^4.18.0"
|
|
36
36
|
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"ws": "^8.18.0"
|
|
39
|
+
},
|
|
37
40
|
"devDependencies": {
|
|
38
41
|
"@types/node": "^20.0.0",
|
|
39
42
|
"@types/ws": "^8.5.10",
|
|
40
43
|
"koishi": "^4.18.0",
|
|
41
|
-
"typescript": "^5.0.0"
|
|
42
|
-
"ws": "^8.18.0"
|
|
44
|
+
"typescript": "^5.0.0"
|
|
43
45
|
},
|
|
44
46
|
"koishi": {
|
|
45
47
|
"description": {
|