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 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, MIN_MAGNITUDE_FOR_PUSH, MIN_INTENSITY_FOR_PUSH, MIN_SCALE_FOR_PUSH } = FILTER_THRESHOLDS;
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 >= MIN_MAGNITUDE_FOR_PUSH) {
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 >= MIN_INTENSITY_FOR_PUSH) {
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 >= MIN_SCALE_FOR_PUSH) {
48
+ if (data.scale !== undefined && data.scale >= min_scale) {
51
49
  return false;
52
50
  }
53
- // If magnitude is between 3.0-4.0 and no significant intensity/scale, filter out
54
- if (data.magnitude !== undefined && data.magnitude >= MIN_MAGNITUDE_ABSOLUTE && data.magnitude < MIN_MAGNITUDE_FOR_PUSH) {
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 reconnection attempts
49
- ws.removeAllListeners('close');
50
- ws.close();
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.9",
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": {